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

本文介绍了一种高效查找链表中倒数第k个结点的方法,通过双指针技巧仅需遍历一次链表即可完成任务。

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

问题:输入一个单链表,输出该链表中倒数第k个结点。例如一个链表从头结点开始,各结点的值依次为1,2,3,4,5,6。倒数第3个结点的值为4。

思路:看到此题的第一想法,应该是想将链表从头到尾遍历一次,统计出链表有多少个结点,到处第k个结点在正数n-k+1处,在重新遍历一次,遍历到n-k+1个结点处,就是我们需要找到的那个结点。

但是这样子的解决方法,需要对链表遍历2次,面试官肯定会不满意,我们需要找到更高效的方法。

用2个指针同时标记是解决链表问题的常用解决方法。 我们使用p1p2两个指针,将p1从链表头结点开始遍历,当p1经过k个结点时,p2也从头结点开始向后遍历

这样p1和p2两个指针的距离为k-1,当p1到达链表尾时,即p2->next==NULL,此时p1所指向的结点就是我们需要找到的倒数第k个结点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值