LeetCode-劍指offer-22-連結串列中的倒數第K個節點(雙指標)
阿新 • • 發佈:2021-02-10
目錄
題目要求
原題連結:劍指 Offer 22. 連結串列中倒數第k個節點
輸入一個連結串列,輸出該連結串列中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即連結串列的尾節點是倒數第1個節點。
例如,一個連結串列有 6 個節點,從頭節點開始,它們的值依次是 1、2、3、4、5、6。這個連結串列的倒數第 2 個節點是值為 4 的節點。
示例:
給定一個連結串列: 1->2->3->4->5, 和 k = 2.
返回連結串列 4->5.
解題過程
雙指標
尋找倒數第k個節點,不需要知道原本的連結串列長度。
只需要定義兩個指標,first和second,first比second先走k步,然後兩者一起走即可~first走到盡頭的時候,first和second始終相差k,所以second為倒數第k個節點。
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
ListNode first = new ListNode ();
ListNode second = new ListNode();
first = head;
second = head;
// 先讓第一個指標往前走k步
for(int i = 0; i < k; i++){
first = first.next;
}
// 兩個指標一起運動
while(first != null){
first = first.next;
second = second. next;
}
// 返回second節點即可
return second;
}
}