实现一种算法,找出单向链表中倒数第 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 count = 0;
ListNode temp = head;
//遍历一遍,记录链表的长度
while (temp != null) {
count++;
temp = temp.next;
}
temp = head;
for (int i = 0; i < count - k; i++) {
temp = temp.next;
}
return temp.val;
}
}
解法二
/**
* 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) {
//双指针,先让temp走k步,然后temp和head一起走,当temp到末尾时,head也到了要求的位置
ListNode temp = head;
for (int i = 0; i < k-1; i++) {
temp = temp.next;
}
while (temp.next != null) {
head = head.next;
temp = temp.next;
}
return head.val;
}
}