基础算法【解题思路】:单链表的倒数第k个节点

定义指针p1,让p1走k步:

定义指针p2,在p1走了k步的时候,p2也跟着走。

p1走到最后的时候走了n-k步,停留在最后的null结点。
P2从头结点开始,也跟着走到了n-k步,而n-k恰好是倒数第k个节点。

例子:
基础算法【解题思路】:单链表的倒数第k个节点_第1张图片

实现:

// 返回链表的倒数第 k 个节点
static ListNode findFromEnd(ListNode head, int k) {
    ListNode p1 = head,//第一个指针
            p2 = head;//第二个指针
    for (int i = 0; i < k; i++) {
        p1 = p1.next;
    }


    while (p1 != null){
        p1 = p1.next;
        p2 = p2.next;
    }
    return p2;
}

参考

labuladong

你可能感兴趣的:(数据结构和算法,算法)