题目描述:
输入一个链表,输出该链表中倒数第k个结点。
思路:
思路1:
1. 使用两个指针p, q. 起始时,他们都在同一个位置。
2. 先让q走k下,让他到达顺数第q个节点。
3. 再让p,q同时走,当q走到最后一个节点的时候,p就指向倒数第k个节点了。
注意:
各种超越边界的情况:
1. k = 0
2. k大于了链表的长度
3. 输入的是空指针
链表题目中,默认情况下第一个节点就是头节点。
代码
import DateStructure.ListNode;
public class FindKthToTail {
public static ListNode findKthToTail(ListNode head, int k) {
if(head == null)
return null;
if(k == 0)
return null;
ListNode p = head, q = head;
// 1. 让q先走k步
for (int i = 0; i < k - 1; i++) {
q = q.next;
if(q == null)
return null;
}
// 2. 让p,q同时走
while (q.next != null) {
p = p.next;
q = q.next;
}
return p;
}
public static void main(String[] args) {
}
}