22、求链表中倒数第 K 个节点

该博客介绍了如何在Java中找到链表的倒数第k个节点。通过双指针法,首先让快指针移动k-1步,然后同时移动两个指针直到快指针到达链表末尾,此时慢指针就位于倒数第k个节点。代码清晰,易于理解,适合初学者和进阶者学习链表操作。

在这里插入图片描述

package com.yuan;

/**
 * @author QLBF
 * @version 1.0
 * @date 2021/5/29 11:06
 */
class ListNode2{
    int val;
    ListNode2 next;

    public ListNode2(int val) {
        this.val = val;
    }
}
public class demo4 {
    public static ListNode2 CountDownListNode(ListNode2 head,int k){
        // 链表不能为空,查找的倒数第k个结点k不能小于1,下标从1开会
        if (head==null || k< 1){
            return null;
        }
        // 开始时声明两个结点使其都指向头结点
        ListNode2 fast=head;
        ListNode2 last=head;
        // 使aNode达到第k-1个结点
        for (int i=1;i<=k-1;i++){
            if (fast.next!=null){
                fast=fast.next;
            }else {
                // 链表太短,打不到k-1个结点
                return null;
            }
        }
        while (fast.next!=null){
            fast=fast.next;
            last=last.next;
        }
        return last;
    }
    public static void main(String[] args) {
        ListNode2 n1=new ListNode2(21);
        ListNode2 n2=new ListNode2(55);
        ListNode2 n3=new ListNode2(23);
        ListNode2 n4=new ListNode2(24);
        n1.next=n2;
        n2.next=n3;
        n3.next=n4;

        ListNode2 listNode2 = CountDownListNode(n1, 2);
        if (listNode2!=null){
            System.out.println(listNode2.val);
        }
    }
}

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值