求链表中倒数第k个结点

这篇博客介绍了如何在链表中找到倒数第k个节点,提供了两种不同的思路:一是先获取链表长度再进行遍历;二是使用两个指针,一个先走k步,然后同步遍历直到第一个指针到达末尾。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

思路一:
要求倒数第k个结点,那我们首先想到的肯定是求出此链表的长度len,求出长度len后,倒数第k个结点就是头结点往后遍历len-k个结点。

1)引用p1指向头结点
在这里插入图片描述
2)p1像后遍历len-k个结点
在这里插入图片描述

public class FindKthToTail {

    //找到链表中的倒数第k个结点
    //1.求得链表长度len
    //2.创建一个新的引用指向head
    //3.head遍历len-k个结点得到的就是倒数第k个结点

    public static Node FindKthToTail(Node head,int k){
        int len = getLength(head);

        if(len < k){
            return null;
        }
        int steps = len-k;
        Node result  = head;
        for(int i = 0;i<steps;i++){
            result = result.next;
        }
        return result;

    }

    public static int getLength(Node head){
        int len = 0;
        for(Node cur = head;cur != null;cur = cur.next){
            len++;
        }
        return len;
    }

思路二:
1.创建俩个结点,让第一个引用先往后遍历k个,然后和第二个一起往后遍历
2.当第一个引用为空时,第二个引用所指向的为倒数第k个结点

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

public class FindKthToTail {

    //找到链表中的倒数第k个结点
    //1.创建俩个结点,让第一个引用先往后遍历k个,然后和第二个一起往后遍历
    //2.当第一个引用为空时,第二个引用所指向的为倒数第k个结点
    public static Node findKthToTail(Node head,int k){
        Node p1 = head;
        Node p2 = head;

        for(int i = 0;i<k;i++){
            if(p1 == null){
                return null;
            }
            p1 = p1.next;
        }
        while(p1 != null){
            p1 = p1.next;
            p2 = p2.next;
        }
        return p2;

    }

    public static void main(String[] args) {
        Node head = new Node(1);
        head.next = new Node(3);
        head.next.next = new Node(4);
        head.next.next.next = new Node(9);
        head.next.next.next.next = new Node(12);
        System.out.println(findKthToTail(head,2).val);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值