题目
输入一个单向链表,输出该链表中倒数第k个节点。链表的倒数第0个节点为链表的尾指针。
链表节点的定义如下:
ListNode {
int value;
ListNode next;
}
解法
1. 这个问题,我们可能会想到先反转链表再找到第k个节点,但这样会比较麻烦。
2. 考虑一种方法:首先将一个指针end从头节点移动到正数第k个节点上,然后将另一个指针start指向头节点,两个指针一起移动,直到end节点移动到尾节点,那么此时由于start和end节点之间始终距离为k,因此这时start指针指向的即为倒数第k个节点,返回即可。
FINE-BACKWARDS-K-NODE(L.head, k):
if k < 0:
error;
ListNode start = L.head, end = L.head;
for i = k to 0:
if end.next != null:
end = end.next
while end.next != null:
start = start.next;
end = end.next;
return start;