【数据结构】链表(leetcode)

目录

① 203.移除链表元素

② 206.反转链表

③ 876.链表的中间节点 

④ 返回倒数第k个节点(面试题)

⑤ 21.合并两个有序链表

⑥ 160.相交链表 

⑦ 138.随机链表的复制(深拷贝)


f65f2847c0974f8690bdeca8d6867a0f.gif


① 203.移除链表元素

d489e57558fa48ac852b2823a86dffa2.png

 

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {ListNode*newHead = NULL, *newTail = NULL;ListNode*pcur = head;while(pcur != NULL){if(pcur->val != val){if(newHead == NULL){//将新链表的头尾指针指向原链表头节点newHead = newTail = pcur;}else{newTail->next = pcur;newTail = newTail->next;}}pcur = pcur->next;}if(newTail != NULL){newTail->next = NULL;}                                                                        return newHead;
}

 

 


 

 

② 206.反转链表

 39aa95d0fe0944d18f93268d49f5a543.png

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* reverseList(struct ListNode* head) {struct ListNode* prev = NULL;//哨兵位struct ListNode* cur = head;//头节点while (cur) {// 哨兵位(prev)  节点1(cur)  节点2(cur->next)struct ListNode* next = cur->next;//创建一个中间节点//开始改变链表的方向cur->next = prev;//节点2先指向节点1的前一个节点prev = cur;//哨兵位往后移动cur = next;//节点1向后移动}return prev;
}

 

 


 

 

③ 876.链表的中间节点 

f316c4e6c2dd4673b9b27bc84ad73646.png

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* middleNode(struct ListNode* head) {//慢指针(一次走一步)struct ListNode* slow = head;//快指针(一次走两步)struct ListNode* fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}return slow; 
}

 

 


 

 

④ 返回倒数第k个节点(面试题)

7d8c78d2f96c4b049b90362c8144706b.png

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
int kthToLast(struct ListNode* head, int k) {struct  ListNode *fast = head, *slow = head;//本题采用的是相对法://      fast先运动k个节点//      假设该链表的节点个数是 m+k 个//      则先走k个节点,剩下fast指针到null指针时,即走了m个节点//      此时,slow指针就剩余k个节点while(k--){fast = fast->next;}while(fast != NULL){slow = slow->next;fast = fast->next;   }return slow->val;
}

 

 


 

 

⑤ 21.合并两个有序链表

 

33bda6c74a77458eae7845409d991cd1.png

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {if(list1 == NULL){return list2;}if(list2 == NULL){return list1;}struct ListNode* l1 = list1;struct ListNode* l2 = list2;struct ListNode* newHead, *newTail;                                                             newHead = newTail = NULL;while(l1  &&  l2){//比大小if(l1->val < l2->val){if(newHead == NULL){newHead = newTail = l1;}else{newTail->next = l1;newTail = newTail->next;}l1 = l1->next;}else{if(newHead == NULL){newHead = newTail = l2;}else{newTail->next = l2;newTail = newTail->next;}l2 = l2->next;}}if(l1){newTail->next = l1;}if(l2){newTail->next = l2;}return newHead;
}

 

 


 

 

⑥ 160.相交链表 

ec919a9804a74894a852973faae88385.png

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode* curA = headA,  *curB = headB;int lenA = 1, lenB = 1;while(curA->next){curA = curA->next;++lenA;}while(curB->next){curB = curB->next;++lenB;}if(curA != curB){return NULL;}//假设法int gap = abs(lenA - lenB);struct ListNode* longList = headA, *shortList = headB;if(lenB > lenA){longList = headB;shortList = headA;}`while(gap--){longList = longList->next;}while(longList != shortList){longList = longList->next;shortList = shortList->next;}return longList;}

 

 


 

 

⑦ 138.随机链表的复制(深拷贝)

1369640e4ebc41a29064d21f90ee31cf.png

53510b52c9804686aa1fe9e98b51005d.png

 

/*** Definition for a Node.* struct Node {*     int val;*     struct Node *next;*     struct Node *random;* };*/struct Node* copyRandomList(struct Node* head) {struct Node* cur = head;while(cur){struct Node * copy = (struct Node*)malloc(sizeof(struct Node));//赋值copy->val = cur->val;//将copy链表插入原链表中copy->next = cur->next;cur->next = copy;//cur向后移动cur = copy->next;}//将copy链表中random指针的指向与原链表中的指针对调cur = head;while(cur){struct Node* copy = cur->next;if(cur->random == NULL){copy->random = NULL;}else{copy->random = cur->random->next;}cur = copy->next;}cur = head;struct Node* copyHead = NULL,* copyTail =NULL;while(cur){struct Node* copy = cur->next;if(copyTail == NULL){copyHead = copyTail = copy;}else{copyTail->next = copy;copyTail = copyTail->next;}//cur向后移动cur = copy->next;}return copyHead;
}

 


f1676cb2fcf24d61b464dfe0a9decfdd.gif

 

相关新闻

ffmpeg视频滤镜:替换部分帧-freezeframes

ffmpeg视频滤镜:替换部分帧-freezeframes

滤镜描述 freezeframes 官网地址 > FFmpeg Filters Documentation 这个滤镜接收两个输入&#xff0c;然后会将第一个视频中的部分帧替换为第二个视频的某一帧。 滤镜使用 参数 freezeframes AVOptions:first <int64> ..FV....... set first fra…

2026/7/12 5:55:57 阅读更多 →
用python简单集成一个分词工具

用python简单集成一个分词工具

本部分记录如何利用Python进行分词工具集成&#xff0c;集成工具可以实现运行无环境要求&#xff0c;同时也更方便。 该文章主要是记录&#xff0c;知识点不是特别多&#xff0c;欢迎访问个人博客&#xff1a;https://blog.jiumoz.top/archives/fen-ci-gong-ju-ji-cheng 成品展…

2026/7/13 21:11:02 阅读更多 →
HarmonyOS . 沉浸状态栏使用

HarmonyOS . 沉浸状态栏使用

1,自定义 AppBar 组件 Component export struct AppBar {private title: string | Resource ;private color?: ResourceColor;StorageProp(topRectHeight)topRectHeight:number0BuilderloadBuilder() {}BuildertailingBuilder() {Shape().width(28)}BuildertitleBuilder(){T…

2026/7/19 19:56:05 阅读更多 →
Unity游戏发布安卓全流程:从环境配置到APK打包与深度排错

Unity游戏发布安卓全流程:从环境配置到APK打包与深度排错

1. 项目概述&#xff1a;从Unity到安卓的最后一公里如果你已经跟着教程&#xff0c;在Unity里捣鼓出了一个能跑起来的小游戏&#xff0c;看着编辑器里运行流畅的画面&#xff0c;成就感满满。但接下来&#xff0c;一个更实际的问题摆在面前&#xff1a;怎么让它在你的安卓手机上…

2026/7/19 20:02:53 阅读更多 →
VC++实战:深入解析Windows .lnk文件二进制格式与实现

VC++实战:深入解析Windows .lnk文件二进制格式与实现

1. 项目概述&#xff1a;为什么需要解析.lnk文件&#xff1f; 在Windows的日常运维、数字取证、自动化脚本开发&#xff0c;甚至是恶意软件分析领域&#xff0c; .lnk 文件&#xff08;快捷方式&#xff09;都是一个看似简单却内涵丰富的宝藏。很多朋友可能觉得&#xff0c;快…

2026/7/19 20:02:53 阅读更多 →
射频天线阻抗匹配实战:从史密斯圆图到VNA校准调谐

射频天线阻抗匹配实战:从史密斯圆图到VNA校准调谐

1. 项目概述&#xff1a;为什么天线匹配是无线产品的“临门一脚”干了十多年射频硬件&#xff0c;画过的板子、调过的天线不计其数&#xff0c;我越来越觉得&#xff0c;天线阻抗匹配这活儿&#xff0c;就像足球比赛里的临门一脚。你前面芯片选型、电路设计、PCB布局都做得漂漂…

2026/7/19 20:02:53 阅读更多 →
多智能体协作系统:架构设计、框架选型与实战全指南

多智能体协作系统:架构设计、框架选型与实战全指南

多智能体协作系统&#xff1a;架构设计、框架选型与实战全指南 2026年7月&#xff0c;当单一超大模型的能力增长曲线逐渐平缓&#xff0c;AI应用的前沿阵地已全面转向多智能体系统。据行业报告显示&#xff0c;在复杂业务流程自动化、科研探索、代码工程等领域&#xff0c;采用…

2026/7/19 20:02:53 阅读更多 →
C++实现跨平台CPU使用率监控:从原理到实战代码解析

C++实现跨平台CPU使用率监控:从原理到实战代码解析

1. 项目概述&#xff1a;为什么我们需要精确监控CPU使用率&#xff1f;在开发高性能应用、后台服务或者进行系统性能调优时&#xff0c;CPU使用率是一个绕不开的核心指标。它就像汽车的转速表&#xff0c;告诉你引擎&#xff08;CPU&#xff09;当前的工作负荷。但很多开发者&a…

2026/7/19 20:02:53 阅读更多 →
合肥蜀山区轻奢包包上门回收,2026 易奢福快速估价即时结算 - 奢侈品回收实体店

合肥蜀山区轻奢包包上门回收,2026 易奢福快速估价即时结算 - 奢侈品回收实体店

2026 年二手奢侈品回收行业进入标准化合规新阶段,商务部《关于促进二手商品流通的指导意见》、《奢侈品鉴定技术规范》(T/DZYX023-2024) 正式落地,市场加速淘汰无资质散户、小型中介,具备国家级权威资质、连锁实体门…

2026/7/19 20:01:40 阅读更多 →
鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战&#xff1a;Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析 前言 Emoji Idiom Guess 是一个基于鸿蒙 ArkTS 编写的单页互动应用&#xff0c;核心围绕 表情线索、答案输入、首字母提示和收藏关卡 展开。项目没有依赖复杂服务端&#xff0c;也没有把逻辑…

2026/7/19 0:00:03 阅读更多 →
Unity与Python本地通信:基于Flask的跨语言数据交换实战

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述&#xff1a;为什么我们需要一个本地通信服务器&#xff1f;在游戏开发、数字孪生、仿真训练等众多领域&#xff0c;Unity作为强大的实时3D内容创作平台&#xff0c;其核心逻辑通常由C#驱动。然而&#xff0c;当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:04 阅读更多 →
科研课题设计全流程:从选题到成果落地的实战指南

科研课题设计全流程:从选题到成果落地的实战指南

1. 课题设计全流程解析&#xff1a;从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量&#xff0c;更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…

2026/7/19 0:00:04 阅读更多 →
鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战&#xff1a;Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析 前言 Emoji Idiom Guess 是一个基于鸿蒙 ArkTS 编写的单页互动应用&#xff0c;核心围绕 表情线索、答案输入、首字母提示和收藏关卡 展开。项目没有依赖复杂服务端&#xff0c;也没有把逻辑…

2026/7/19 0:00:03 阅读更多 →
Unity与Python本地通信:基于Flask的跨语言数据交换实战

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述&#xff1a;为什么我们需要一个本地通信服务器&#xff1f;在游戏开发、数字孪生、仿真训练等众多领域&#xff0c;Unity作为强大的实时3D内容创作平台&#xff0c;其核心逻辑通常由C#驱动。然而&#xff0c;当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:04 阅读更多 →
科研课题设计全流程:从选题到成果落地的实战指南

科研课题设计全流程:从选题到成果落地的实战指南

1. 课题设计全流程解析&#xff1a;从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量&#xff0c;更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…

2026/7/19 0:00:04 阅读更多 →
ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

简介 saa是java的ai agent框架&#xff0c;本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理&#xff0c;不仅可以指导agent的开发&#xff0c;更可以改造框架&#xff0c;增加新特性 系列内容&#xff1a; 系列(一) 架构 完成 系列(三) 调用 I 工具 完成 II M…

2026/7/19 0:01:20 阅读更多 →
终极指南:如何用Steam-auto-crack实现Steam游戏自动破解

终极指南:如何用Steam-auto-crack实现Steam游戏自动破解

终极指南&#xff1a;如何用Steam-auto-crack实现Steam游戏自动破解 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack Steam-auto-crack是一款功能强大的Steam游戏自动破解工具&#xff…

2026/7/19 9:10:31 阅读更多 →
移动端游戏功耗测试实战:电流、功率、亮度和场景对比

移动端游戏功耗测试实战:电流、功率、亮度和场景对比

移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…

2026/7/19 19:29:48 阅读更多 →