1. 程式人生 > 實用技巧 >LeetCode–連結串列中倒數第k個節點

LeetCode–連結串列中倒數第k個節點

LeetCode–連結串列中倒數第k個節點

部落格說明

文章所涉及的資料來自網際網路整理和個人總結,意在於個人學習和經驗彙總,如有什麼地方侵權,請聯絡本人刪除,謝謝!

介紹

劍指 Offer 22. 連結串列中倒數第k個節點

題目

輸入一個連結串列,輸出該連結串列中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即連結串列的尾節點是倒數第1個節點。例如,一個連結串列有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個連結串列的倒數第3個節點是值為4的節點。

示例:
給定一個連結串列: 1->2->3->4->5, 和 k = 2.

返回連結串列 4->5.

思路

  • 初始化: 前指標 former 、後指標 latter ,雙指標都指向頭節點 head 。
  • 構建雙指標距離: 前指標 former 先向前走 k 步(結束後,雙指標 former 和 latter 間相距 k 步)。
  • 雙指標共同移動: 迴圈中,雙指標 former 和 latter 每輪都向前走一步,直至 former 走過連結串列 尾節點 時跳出(跳出後, latter 與尾節點距離為 k-1,即 latter 指向倒數第 k 個節點)。
  • 返回值: 返回 latter 即可。

程式碼

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode getKthFromEnd(ListNode head, int k) {
        ListNode former = head, latter = head;
        for(int i = 0; i < k; i++){
            former = former.next;
        }
        while(former != null){
            former = former.next;
            latter = latter.next;
        }
        return latter;
    }
}

感謝

Leetcode

以及勤勞的自己,個人部落格GitHub