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