1. 本题知识点
双指针
2. 题目描述
输入一个链表,输出该链表中倒数第 k 个结点。
3. 解题思路
设置两个指针 P1 和 P2,让它们都指向链表第一个结点
先让 P1 移动 K 个节点,则还有 N - K 个节点可以移动。(假设 K = 3,N = 5)
然后让 P1 和 P2 同时移动,当 P1 移动到链表结尾时,P2 移动到第 N - K 个结点处,该位置就是倒数第 K 个结点。
4.代码
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 (head
== null
) {
return null
;
}
ListNode p1
= head
;
ListNode p2
= head
;
while (k
> 0 && p1
!= null
) {
p1
= p1
.next
;
k
--;
}
if (k
> 0) {
return null
;
}
while (p1
!= null
) {
p1
= p1
.next
;
p2
= p2
.next
;
}
return p2
;
}
}