輸入乙個鍊錶,輸出該鍊錶中倒數第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 遍歷鍊錶,入陣...