LeetCode–連結串列中倒數第k個節點
阿新 • • 發佈:2020-09-11
LeetCode–連結串列中倒數第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