寻找链表的倒数第k个节点
2024-10-09 14:59:55
寻找链表的倒数第k个节点
题目:已知一个带有表头结点的单链表,节点结构为(data,next),假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的节点(k为正整数),若查找成功,返回指向该节点的指针;否则,返回nullptr。
解法:设置两个指针p1,p2同时指向单链表的表头,令p2向后移动k个节点。下图为k=3的情况
之后同步向后移动p1和p2,当p2为nullptr的时候,p1即为所求。
代码:
struct Node
{
int data;
Node* next;
};
using List = Node*;
Node* locateNodeFromBottom(List l, int k)
{
Node* p1 = l;
Node* p2 = l;
//p2向后移动k步
for (int step = 0; step < k && p2 != nullptr; ++step)
p2 = p2->next;
//若链表长度小于k,则返回nullptr
if (nullptr == p2)
return nullptr;
//同步移动p1和p2,当p2为nullptr时,p1即为所求
while (p2 != nullptr)
{
p2 = p2->next;
p1 = p1->next;
}
return p1;
}
时间复杂度:该算法只遍历了一次链表,故算法的时间复杂度为O(n)
最新文章
- visual studio installer 打包123
- ajax post提交form表单 报400错误 解决方法
- Android 开发快速导引:Android程序框架【草】
- 缓存技术Redis在C#中的使用及Redis的封装
- Fast Member
- UDP Client—Linux
- text-overflow:ellipsis实现超出隐藏时省略号显示
- PV UV
- c# 迭代器 与 集合 IEnumerable.GetEnumerator 方法
- C++拷贝构造函数详解
- gcc编译参数之m32 m64
- css清除浮动方法小结
- 【Leetcode】无重复字符的最长子串
- Flask 验证码 点击验证码刷新
- tensorflow学习之(八)使用dropout解决overfitting(过拟合)问题
- 朱晔的互联网架构实践心得S1E1:Pilot
- xgboost入门与实战
- BZOJ5104 Fib数列(二次剩余+BSGS)
- Android中Invalidate与postInvalidate的区别<;转>;
- 《JavaWeb从入门到改行》多重外键关系在java中的处理方案
热门文章
- [转]Spring Security架构
- 【NOIP2016】换教室 题解(期望DP)
- ASP.NET Core - 实现Http自定义请求头策略
- HTML学习第三天
- python中1 is True 的结果为False,is判断与==判断的区别
- 在阿里云托管kubernetes上利用 cert-manager 自动签发 TLS 证书[无坑版]
- STM32 重启之后程序丢失
- Javascript模块化编程(二):AMD规范 (转)
- Asp.net Core 3.1 引用ORM工具包 yrjw.ORM.Chimp(EF + dapper + Autofac)使用教程
- JavaScript学习系列博客_25_JavaScript 数组(Array)