面试题15:链表中倒数第k个结点

本文介绍了一种高效查找链表中倒数第K个结点的方法。通过使用双指针技术,仅需遍历一次链表即可找到目标结点。此方法避免了两次遍历链表的复杂度。

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


面试题15:链表中倒数第k个结点

题目描述

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

代码:

package offer;

/**
 * 面试题15:链表中倒数第K个节点
 * 输入一个链表,输出该链表中倒数第k个结点。
 */
public class _15_linked_K {
    public static void main(String[] args){
        Solution15 solution15 = new Solution15();
        ListNode15 l5 = new ListNode15(1);
        l5.next=new ListNode15(2);
        l5.next.next=new ListNode15(3);
        l5.next.next.next=new ListNode15(4);
        l5.next.next.next.next=new ListNode15(5);
        System.out.println(solution15.FindKthToTail(l5,4).val);
    }
}

/**
 * 思路一:倒数第k个节点的值即为正数第n-k+1个节点,但是链表长度n未知,求n需再遍历一次链表。
 * 思路二:设置两个指针,第一个指针从链表第k-1个位置开始遍历,第二个指针从第0个位置开始遍历,当第一个指针到达链表尾部的时候,第二个指针即为倒数第k个节点。
 */
class Solution15 {
    public ListNode15 FindKthToTail(ListNode15 head,int k) {
        if(head==null||k<=0){
            return null;
        }
        ListNode15 p=head;
        for(int i=1;i<k;i++){
            p=p.next;
            if(p==null){
                return null;
            }
        }
        while(p.next!=null){
            head=head.next;
            p=p.next;
        }
        return head;
    }
}
class ListNode15 {
    int val;
    ListNode15 next = null;
    ListNode15(int val) {
        this.val = val;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值