龙空技术网

算法常见题——链表中倒数第k个节点

Java面试必赢 160

前言:

现在我们对“链表逆向输出”大致比较重视,咱们都想要了解一些“链表逆向输出”的相关内容。那么小编也在网上网罗了一些有关“链表逆向输出””的相关内容,希望兄弟们能喜欢,我们一起来学习一下吧!

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

示例:

给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.

分析:

正向的第k个节点比较容易,但是要倒数,所以需要减法来进行操作。链表的减法来说,一般通过双指针来进行操作。先正向再逆向到最后,这样就相当于找到了倒数第k个节点。

算法流程:

1.初始化: 前指针 former 、后指针 latter ,双指针都指向头节点 head 。

2.构建双指针的距离: 前指针 former 先向前走 k 步(结束后,双指针 former 和 latter 间相距 k 步)。

3.双指针共同移动: 循环中,双指针 former 和 latter 每轮都向前走一步,直至 former 走过链表尾节点时跳出(跳出后, latter 与尾节点距离为 k-1,即 latter 指向倒数第 k 个节点)。

4.返回值: 返回 latter 即可。

class Solution {

public ListNode getKthFromEnd(ListNode head, int k) {

// 初始化双指针

ListNode former = head, latter = head;

// 正向移动k个距离

for(int i = 0; i < k; i++)

former = former.next;

// 双指针共同移动相同距离,latter指针相当于走了(长度-k)步长,反过来说来看就是倒数k个步长

while(former != null) {

former = former.next;

latter = latter.next;

}

// 返回结果

return latter;

}

}

标签: #链表逆向输出