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

2021-10-11 01:45:09 字數 970 閱讀 2196

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

1、借助棧、或陣列

public listnode findkthtotail1

(listnode head,

int k)

stack

stack=

newstack

<

>()

; listnode p =head;

int num=0;

while

(p!=null)

if(numfor(

int i=

1;i)return stack.

pop();

}

2、兩次遍歷,第一遍求總數,得出正數多少個,第二遍遍歷的正數的那個

public listnode findkthtotail2

(listnode head,

int k)

int num=0;

listnode p =head;

while

(p!=null)

if(k>num)

p=head;

for(

int i=

1;i<

(num-k+1)

;i++

)return p;

}

3、快慢指標:快指標先走k步,快指標到頭,慢指標停留在倒數第k個。

/*

* 思路3:快慢指標

* --快指標先走k步

* --當快指標走到tail時,慢指標就在倒數第k個結點

*/public listnode findkthtotail3

(listnode head,

int k)

while

(p!=null)

return q;

}

劍指offer系列之14 反轉鍊錶

題目描述 定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出翻轉後鍊錶的頭節點。思路 在調整節點i的m pnext指標時,除了需要知道節點i本身,還需要節點i的前乙個節點h,因為需要把節點i的m pnext指向節點h,同時還需要乙個儲存i的乙個節點j,以防止鍊錶斷開,因此需要定義三個指標,分別指向...

劍指offer系列 反轉鍊錶

題目描述 給定乙個單鏈表的頭節點,反轉該鍊錶,並返回反轉後的頭節點 分析 從鍊錶頭部開始向後遍歷,注意每次要儲存待反轉節點的prev和next節點 listnode reverselist listnode head return p 其中1 m n list.len 示例 給定的單鏈表為 1 2 ...

劍指offer系列 15 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。解法1 借助資料結構,陣列,棧來反轉鍊錶。思路1 借助陣列,反轉鍊錶 public listnode reverselist listnode head listnode p head arraylist list newarraylist 遍歷鍊錶,入陣...