1. 程式人生 > 其它 >LeetCode-劍指offer-22-連結串列中的倒數第K個節點(雙指標)

LeetCode-劍指offer-22-連結串列中的倒數第K個節點(雙指標)

技術標籤:劍指offer刷題記錄LeetCode指標單鏈表

目錄


題目要求

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

輸入一個連結串列,輸出該連結串列中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即連結串列的尾節點是倒數第1個節點。

例如,一個連結串列有 6 個節點,從頭節點開始,它們的值依次是 1、2、3、4、5、6。這個連結串列的倒數第 2 個節點是值為 4 的節點。

示例:

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

返回連結串列 4->5.

解題過程

雙指標

| 時間複雜度: O ( n ) O(n) O(n) | 空間複雜度: O ( 1 ) O(1) O(1) | 推薦

尋找倒數第k個節點,不需要知道原本的連結串列長度。

只需要定義兩個指標,first和second,first比second先走k步,然後兩者一起走即可~first走到盡頭的時候,first和second始終相差k,所以second為倒數第k個節點。

image-20210209100232667

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; } }