AcWing打卡活动
《剑指Offer》打卡活动
周二第十题 链表中倒数第k个节点
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*
* 思路
* 设列表总结点数为n, 则n-(k-1)为该列表的倒数第k个节点
* 如:n = 10, k = 2, 则 10 - (2 - 1) = 9, 为倒数第k(k=2)个节点
* 如何得到n,使用for循环计数器i
*/
class Solution {
public ListNode findKthToTail(ListNode pListHead, int k) {
if(pListHead == null || k <= 0) {
return null;
}
ListNode head = pListHead;
// 使用计数器i,可得出n
for(int i = 0; i < k - 1; i++) {
// 如果节点数小于k,则返回null
if(head.next == null) {
return null;
}
head = head.next;
}
// 倒数第k个节点开始从头节点动
ListNode behind = pListHead;
while(head.next != null) {
head = head.next;
behind = behind.next;
}
return behind;
}
}