面試題 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

2021-08-17 08:41:08 字數 991 閱讀 7602

直接上**,希望大家喜歡。`

//輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

#include

#include

typedef struct nodelink;

link *createlink(int a)

}return head;}/*

可行但不高效的常規解法:假設整個鍊錶有n個結點,那麼倒數第k個結點就是從頭結點開始的第n-k+1個結點。

如果我們能夠得到鍊錶中結點的個數n,那我們只要從頭結點開始往後走n-k+1步就可以了。那麼,

這裡的重點就在於如何求煉表中節點的個數n,只需要從頭開始遍歷鍊錶,每經過乙個結點,計數器加1就行了。

但是,問題來了:這種思路需要遍歷鍊錶兩次,第一次統計出煉表中結點的個數,第二次才能找到倒數第k個結點。

*/link* findk2(link *head,int k)

return p;}/*

可行且高效的解法:為了能夠只遍歷一次就能找到倒數第k個節點,可以定義兩個指標:

(1)第乙個指標從鍊錶的頭指標開始遍歷向前走k-1,第二個指標保持不動;

(2)從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷;

(3)由於兩個指標的距離保持在k-1,當第乙個(走在前面的)指標到達鍊錶的尾結點時,

第二個指標(走在後面的)指標正好是倒數第k個結點。

*/link* findk1(link *head,int k)

p2=head;

while(p1)

return p2;

}int main()

; head=createlink(a);

p1=findk1(head,3);

p2=findk2(head,3);

printf("%d",p1->data);

printf("%d",p2->data);

return

0;}

今日面試題,拿來回憶回憶。

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

1,問題 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。2,想法都在 裡標註了 struct listnode class solution int count 0 listnode temp plisthead while plisthead int m count k 倒數第k個,是順數第count...

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點

思路 兩個指標,先讓第乙個指標和第二個指標都指向頭結點,然後再讓第乙個指正走 k 1 步,到達第k個節點。然後兩個指標同時往後移動,當第乙個結點到達末尾的時候,第二個結點所在位置就是倒數第k個節點了。public class solution public listnode findkthtotai...

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。解題思路 1.先遍歷鍊錶,獲得鍊錶中的總結點數。2.倒數第k個元素,即為順數第 size k 1 個元素。3.遍歷鍊錶,獲得第 size k 1的元素。public class listnode public class solution 統計鍊錶...