題目描述
實現一種算法,找出單向鏈表中倒數第 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;
}
}