劍指Offer-22 鏈表中倒數第k個節點

題意

輸入一個鏈表,輸出該鏈表中倒數第k個節點。爲了符合大多數人的習慣,本題從1開始計數,即鏈表的尾節點是倒數第1個節點。例如,一個鏈表有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鏈表的倒數第3個節點是值爲4的節點。

示例

給定一個鏈表: 1->2->3->4->5, 和 k = 2.

返回鏈表 4->5.

解答

雙指針法


/**
 * 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) {

	// 雙指針法 前後指針都從head開始
        ListNode pre = head;
        ListNode end = head;

	// pre 指針走k步 此時pre與end間距長度 k
        for(int i=0;i<k;i++){
            pre = pre.next;
        }

	// pre 與 end 再同時走
	//當pre爲空的時候, end所在位置正好是倒數第k位,取出即可
        while(pre != null){
            pre = pre.next;
            end = end.next;

        }
        return end;
    }
}


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