前言:
现在我们对“链表逆向输出”大致比较重视,咱们都想要了解一些“链表逆向输出”的相关内容。那么小编也在网上网罗了一些有关“链表逆向输出””的相关内容,希望兄弟们能喜欢,我们一起来学习一下吧!输入一个链表,输出该链表中倒数第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;
}
}
标签: #链表逆向输出