LeetCode–鏈表中倒數第k個節點

LeetCode–鏈表中倒數第k個節點

<!-- more -->

博客說明

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

介紹

劍指 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

微信公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章