当前位置: 首页 > news >正文

链表 合集

一. 206. 反转链表🔗

题目要求:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

四步走三节点:cur走到fore,fore往下走,cur指向pre,pre向前一步走到cur
cur = fore; —— 定位:把“未来”即将处理的节点,变成“当前”节点。
fore = fore->next; —— 探路:“未来”指针继续向前一步,防止断链。
cur->next = pre; —— 反转:“当前”节点掉头,指向“先前”的节点。
pre = cur; —— 跟进:“先前”指针往前挪,接替现在的“当前”位置。

1. 正常做法

classSolution{public:ListNode*reverseList(ListNode*head){if(head==nullptr||head->next==nullptr)returnhead;ListNode*cur=nullptr;ListNode*fore=head;ListNode*pre=nullptr;while(fore){cur=fore;fore=fore->next;cur->next=pre;pre=cur;}returncur;}};

二. 160. 相交链表🔗

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

2. 正常做法

a+c+b=b+c+a,c是公共长度,a和b是不相交的长度。遍历完旧的链表,就跑到另一个链表。

为什么要让pa走完自己的路去走pb的路?
因为两个链表长度可能不一样(比如 A 长 B 短)。如果大家各走各的,永远碰不到一起。但是,如果我走完我的路,再去走你的路;你走完你的路,再来走我的路,我们俩走过的总距离就一定相等了。既然总距离相等,速度又一样(每次走一步),只要我们有公共节点,就绝对会在公共节点准时相遇。

classSolution{public:ListNode*getIntersectionNode(ListNode*headA,ListNode*headB){if(headA==nullptr||headB==nullptr)returnnullptr;ListNode*pa=headA;ListNode*pb=headB;while(pa!=pb){pa=pa==nullptr?headB:pa->next;pb=pb==nullptr?headA:pb->next;}returnpa;}};

三. 234. 回文链表🔗

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。

3.1 笨做法–空间复杂度

classSolution{public:boolisPalindrome(ListNode*head){vector<int>ret1;ListNode*temp=head;while(temp){ret1.push_back(temp->val);temp=temp->next;}for(inti=0;i<ret1.size();++i){if(ret1[i]!=ret1[ret1.size()-1-i])returnfalse;}returntrue;}};

3.2 O(1) 空间复杂度

classSolution{public:ListNode*reverseList(ListNode*head){if(head==nullptr||head->next==nullptr)returnhead;ListNode*prev=nullptr;ListNode*cur=nullptr;ListNode*fore=head;while(fore!=nullptr){cur=fore;fore=fore->next;cur->next=prev;prev=cur;}returnprev;}boolisPalindrome(ListNode*head){if(head==nullptr||head->next==nullptr)returntrue;// 1. 经典快慢指针找中点ListNode*slow=head;ListNode*fast=head;while(fast->next!=nullptr&&fast->next->next!=nullptr){slow=slow->next;fast=fast->next->next;}// 跑完后,slow 刚好停在中点(如果是偶数,停在靠左的中点)// 2. 剪断链表,并套用你的“反转模板”反转后半段ListNode*pre=reverseList(slow->next);// 跑完后,pre 就是反转后的后半段的新头节点//传入 slow->next 的核心意义就在于:强制让后半段脱离中心点,保证 p2 的节点数一定最少。//有了这个保证,while (p2 != nullptr) 就成了绝对安全的屏障,//它保证了在 p2 耗尽之前,p1 绝对不可能变成 nullptr。// 3. 双指针比对ListNode*p1=head;// 前半段的头ListNode*p2=pre;// 后半段的头 (反转后的)boolresult=true;while(p2!=nullptr){// 只要后半段没走完就继续比if(p1->val!=p2->val){result=false;break;// 发现不同,直接标记为 false}p1=p1->next;p2=p2->next;}reverseList(pre);returnresult;}};

1. 偶数情况测试:[1, 2, 2, 1]
2. 奇数情况测试:[1, 2, 3, 2, 1]


四. 141. 环形链表🔗

题目要求:给你一个链表的头节点 head ,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
如果链表中存在环 ,则返回 true 。 否则,返回 false 。

4. 快慢指针

//快慢指针classSolution{public:boolhasCycle(ListNode*head){if(head==nullptr||head->next==nullptr)returnfalse;ListNode*fast=head;ListNode*slow=head;while(fast){if(fast->next!=nullptr)fast=fast->next->next;elsereturnfalse;slow=slow->next;if(fast==slow)returntrue;}returnfalse;}};
http://www.jsqmd.com/news/540741/

相关文章:

  • 如何轻松构建个人媒体中心:益达App跨平台内容聚合器终极指南
  • 从Ping稳如狗到UDP广播狂丢包:一次嵌入式WIFI项目调试的深度复盘与避坑指南
  • FPGA图像处理实战:用Modelsim+Matlab实现RGB转Ycbcr的完整仿真流程(附避坑指南)
  • 国内专业登车桥品牌推荐指南 - 资讯焦点
  • League-Toolkit:英雄联盟智能辅助工具的效率提升之道
  • 3个步骤玩转虚拟手柄模拟:ViGEmBus驱动从入门到精通
  • CNN复杂度优化实战:从理论到Inception系列模型的创新设计
  • 化妆学校哪家师资最专业?内行人实测拆解,小白避坑不花冤枉钱 - 品牌测评鉴赏家
  • 手把手教你:当ESXi服务器断电后,如何一步步从RAID5阵列中恢复丢失的VMFS分区和虚拟机
  • 基于simulink的七自由度汽车四轮独立驱动稳定性控制,利用模型预测MPC控制算法,包含参考文献
  • AI赋能开发:在快马平台直接调用多模型助手,无需本地安装任何AI工具
  • OpenClaw快速安装部署:让AI住进你的电脑
  • 这里模拟各种操作并断言结果
  • ABAQUS盾构隧道开挖模型:一环七片含螺栓配筋的Cae文件(单位:毫米)
  • 2026零基础学化妆怎么选?新手择校全攻略,实用好懂易上手 - 品牌测评鉴赏家
  • CentOS7下docker方式安装magento2
  • HUNYUAN-MT企业级Java集成指南:构建高并发翻译微服务
  • 如何使用 Java 替换特定字符串后的文本
  • 代码随想录一刷记录Day6——leetcode454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
  • Altium Designer 19导出Gerber文件,我踩过的这些坑希望你别再踩(附完整配置清单)
  • APP测试 - adb基础命令2
  • 手把手教你无损合并磁盘分区:从删除卷到空间分配的5个关键陷阱
  • 无线通信入门:为什么说DFT是提升OFDM信道估计性能的“降噪神器”?
  • 二手圆锯机市场2026评测:实力企业大盘点,行业内二手圆锯机厂商推荐耀本机械专注行业多年经验,口碑良好 - 品牌推荐师
  • 避坑指南:Joern生成PDG时行号丢失问题的3种解决方案
  • Llama-3.2V-11B-cot开发者案例:基于Streamlit定制化UI扩展实践
  • 2026年最新化妆学校权威排行榜 小白择校必看 - 品牌测评鉴赏家
  • gdb 之 attach
  • 扎根工业一线!JBoltAI两款数智化产品解锁工厂提效新路径
  • DevEco Studio NEXT实战:如何快速定位并解决hvigor的configProps报错问题