C语言面试题22. 链表中倒数第k个节点
2024-08-28 17:06:57
要求:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
示例:
给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.
思路:定义快慢双指针,先让快指针先走k步,然后双指针一起移动,完成只需要遍历一遍
struct ListNode* getKthFromEnd(struct ListNode* phead, int k){
struct ListNode* pfast = phead ;
struct ListNode* pslow= phead ;
while(k--)
{
pfast=pfast->next ;
}
while(pfast!=NULL)
{
pslow=pslow->next;
pfast =pfast->next;
}
return pslow ;
}
BTW 下面顺提一下我一开始的麻烦做法虽然也通过了不过是真的蠢 - -
先反转 然后找到反转的节点,接着再反转@@ 哈哈。还是要熟练运用快慢指针呀
struct ListNode* curr =phead ;
struct ListNode* temp =NULL ;
struct ListNode* p =NULL ;
//反转链表
while(curr!=NULL)
{
temp = curr->next ;
curr->next =prev ;
prev = curr ;
curr = temp ;
}
//找到倒数k的节点
phead = prev ;
p=phead;
while(len != k)
{
p=p->next ;
len++ ;
}
curr = phead ;
prev =NULL ;
//继续反转
while(prev!=p)
{
temp =curr->next;
curr->next =prev ;
prev = curr ;
curr =temp ;
}
return prev ;
最新文章
- Android笔记之——事件的发生
- python面向对象中的__init__方法怎么理解?
- go-- 用go-mssql驱动连接sqlserver数据库
- POJ1637 Sightseeing tour(判定混合图欧拉回路)
- [moka同学笔记]Yii2.0验证码
- 在Oracle里,表的别名不能用as,列的别名可以用as
- [Android Pro] android Flag介绍
- Windows Server 2012 R2 设置 smtp 服务器
- Git教程(2)官方命令文档及常用命令表
- 重启php-fpm
- WORD文档的长串数字如何粘贴到excel
- Android判读是否安装了某一款APP
- C语言获取键盘按键
- Linux GPIO 注册和应用
- java中的对象
- N个数组中所有元素的排列组合(笛卡尔积)算法
- 谈谈Javascript异步代码优化
- Windows驱动开发入门指引
- SpringBoot2.0+Mybatis-Plus3.0+Druid1.1.10 一站式整合
- intellij idea 汉化