链表中倒数第 k 个节点

题目描述

输入一个链表,输出该链表中倒数第 k 个结点。

解题想法

  • 快慢指针,low 和 high,high 先走 k 步,剩下的 low 和 high 一起走,high 等于 null 时,low 就处于倒数第 k 个节点位置。

  • 考虑链表长度为空,链表长度小于 k 的情况

  • 考虑边界条件,倒数第 k 个,走多少步,循环跳出条件。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

/*
public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if (k <= 0 || head == null){
return null;
}
ListNode low = head;
ListNode high = head;
for(int i = 0 ;i < k;i++){
if(high == null){
return null;
}
high = high.next;
}
while(high != null){
low = low.next;
high = high.next;
}
return low;
}
}