14 劍指offer 鍊錶中倒數第k個結點

2022-08-24 01:48:11 字數 1302 閱讀 5108

題目描述

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

解題思路:

方法一:

定義兩個指標,乙個指標先向前移動k-1步(在移動過程中判斷是否越界)

第二個指標指向頭,然後兩個指標同時向前移動,第乙個指標指向最後乙個節點的時候,第二個指標指向第k個結點

方法二:先全部遍歷一遍,找到鍊錶中結點數目,然後進行k和結點數目length的比較,把特殊錯誤的情況處理出來,然後再用一中的方法用兩個指標,找到倒數第k個結點。

1 #include 2 #include 

3using

namespace

std;

4struct

listnode

10};

11 listnode *createlist(int

n)12

26 p->next=null;

2728

return head->next;29}

30/*

-------------------------輸出鍊錶-----------------------------------

*/31

void printlist(listnode *h)

3242}43

class

solution

56else

5760

}61 pbehind = plisthead;//

當phead指向鍊錶第k-1和節點是,pbehind指向鍊錶的頭

62while(phead->next!=null)

6367

return

pbehind;68}

69 listnode* findkthtotail2(listnode* plisthead, unsigned int

k) 79

if(k ==length)

80return

plisthead;

81else

if(k>length)

82return

null;

83else

//取k%length

14 鍊錶中倒數第k個結點(劍指offer)

14.鍊錶中倒數第k個結點 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。1.思路 我們可以定義兩個指標。第乙個指標從鍊錶的頭指標開始遍歷向前走k 1,第二個指標保持不動 從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k 1,當第乙個 走在前面的 指標到達鍊錶的尾結點時,...

劍指offer 第14題 鍊錶中倒數第k個結點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。雙指標,p1先走k步,然後同時走,p1到頭時候返回p2 倒數第k個就是正數第n k 1個,從第乙個結點到第n k 1個結點一共要走n k步,從第k 1個結點到n 1個結點也是n k步,從第乙個結點到第k 1個結點,走k步 coding utf 8 class...

劍指Offer (14)鍊錶中倒數第k個結點

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。實現如下 最後乙個節點定義為倒數第乙個節點 1 2 3 4 5 p s p s eg.尋找倒數第3個節點 k 1 2 要想一次遍歷找到倒數第k個節點,關鍵在於最後乙個節點與倒數第k個節點之間相差k 1個節點 所以要保證兩個指標之間一直保持k 1個節...