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

連結串列中倒數第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 先向前走 kk 步(結束後,雙指標 former 和 latter 間相距 kk 步)。

雙指標共同移動: 迴圈中,雙指標 former 和 latter 每輪都向前走一步,直至 former 走過連結串列 尾節點 時跳出(跳出後, latter 與尾節點距離為 k-1k−1,即 latter 指向倒數第 kk 個節點)。
返回值: 返回 latter 即可。

 1  /*連結串列中倒數第k個節點*/
 2     public ListNode getKthFromEnd(ListNode head, int k) {
 3         ListNode fast = head, slow = head;
 4         int num = 0;
 5         while
(fast != null) { 6 if (num >= k) { 7 slow = slow.next; 8 } 9 fast = fast.next; 10 num++; 11 } 12 return slow; 13 }