剑指 Offer 22. 链表中倒数第k个节点 java

本文介绍了两种方法来寻找链表中的倒数第k个节点。第一种方法是先遍历链表计算其长度,然后从头节点开始倒数。第二种方法使用快慢指针,快指针先行k步,然后两者同步移动直到快指针到达链表尾部。这两种方法都有效地解决了问题,展示了不同的思考角度。
摘要由CSDN通过智能技术生成

思路一
求链表长度,然后倒数第k个节点就是正数n-k个

class Solution {
    public ListNode getKthFromEnd(ListNode head, int k) {
        int n=0;
        for(ListNode nd=head;nd!=null;nd=nd.next) n++; //求链表长度   
        ListNode dum=head;
        if(n-k<0) return null;
        for(int i=0;i<n-k;i++)
        dum=dum.next;
        return dum;
}
}

思路二
快慢指针法
两个指针,一个快指针指向k+1;一个慢指针指向1
当快指针指向null的时候,慢指针就是指向倒数第k个

ListNode fast=head;
        ListNode slow=head;
        while(fast!=null && k>0)
        {
            fast=fast.next;
            k--;
        }
        while(fast!=null)
        {
            fast=fast.next;
            slow=slow.next;
        }
        return slow;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值