【Java】返回倒數第 k 個節點

題目描述

實現一種算法,找出單向鏈表中倒數第 k 個節點。返回該節點的值。

注意:本題相對原題稍作改動

示例:

輸入: 1->2->3->4->5 和 k = 2
輸出: 4

說明:

給定的 k 保證是有效的。

解題思路

我這裏給出兩種解法

第一種:

1、找到鏈表的長度n

2、把頭結點往後挪n-k個

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int kthToLast(ListNode head, int k) {
        int n;
        ListNode p = head;
        for(n = 1;p.next != null;n++){
            p = p.next;
        }
        for(int i = 0;i < n-k;i++){
            head = head.next;
        }
        return head.val;
    }
}

第二種:

1、雙指針p,q

2、p先走k步

3、然後p和q同時走,直到p結束

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int kthToLast(ListNode head, int k) {
        // int n;
        // ListNode p = head;
        // for(n = 1;p.next != null;n++){
        //     p = p.next;
        // }
        // for(int i = 0;i < n-k;i++){
        //     head = head.next;
        // }
        // return head.val;
        ListNode p = head;
        ListNode q = head;
        for(int i = 0;i < k;i++){
            p = p.next;
        }
        while(p != null){
            p = p.next;
            q = q.next;
        }
        return q.val;
    }
}

 

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