您的位置 首页 java

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

输入一个 链表 ,输出该链表中倒数第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 即可。

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

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;

}

}

文章来源:智云一二三科技

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

文章地址:https://www.zhihuclub.com/196381.shtml

关于作者: 智云科技

热门文章

网站地图