【典例】链表经典题目合集

article/2025/8/25 10:26:29

目录导航

  • 1. 删除链表中给定值为val的所有节点
  • 2. 反转一个单链表
  • 3. 返回链表中间节点&返回链表倒数第k个节点
  • 4. 链表的回文结构
  • 5. 合并两个有序链表
  • 6. 输入两个链表,找出它们第一个公共节点
  • 7. 分割链表
  • 8. 判断链表是否带环&找环的入口点
  • 9. 复制复杂链表
  • 10. 调试文件

这篇目录导航主要目的之一是方便自己以后复习用,都是非常经典的题目。唯一不同的是,下面最后我调试文件贴出来,数据结构很锻炼调试能力,方便大家自己做题出问题时调试,思路没问题情况下,要坚信自己能调出来。每篇文章都包含了,题目链接、思路分析、题解以及sometimes小边独家反思。

小边碎碎念:目前链表极其经典的题目已经更完了,基本上是增删查改的熟练运用,会发现很多题目都是悄悄含着别的题目的影子。比如判断链表是否带环,快慢指针同样是快指针走两步慢指针走一步,其中就含着快慢指针经典题目,寻找返回链表中点,终止条件的判断需要分奇偶数个节点讨论;比如昨天的回文链表,又内含着寻找中间节点,反转单链表这样经典的题目。有一些题目就是分上下集的小故事,有些可以对比一下,有一点小小经验,它们都写在各个文章里了
这就是经典题目的意义吧,如果不够熟悉,就可能想不到,或者一写就写出小错误,我们不可能背下来它们,但要能做到,拿到之后就能快速正确分析。

在这里插入图片描述

正文开始@边通书

1. 删除链表中给定值为val的所有节点

文章链接:小题解

2. 反转一个单链表

文章链接:小题解

3. 返回链表中间节点&返回链表倒数第k个节点

文章链接:小题解

4. 链表的回文结构

文章链接:小题解

5. 合并两个有序链表

文章链接:小题解

6. 输入两个链表,找出它们第一个公共节点

文章链接:小题解

7. 分割链表

文章链接:小题解

8. 判断链表是否带环&找环的入口点

文章链接:小题解

9. 复制复杂链表

文章链接:小题解

10. 调试文件

其实就是自己根据需求手动尾插构建链表,打开监视、内存观察即可。一般错误都能自己调出来。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>typedef int SListDataType;typedef struct SListNode
{SListDataType data;struct SListNode* next;
}SLTNode;void SListPrint(SLTNode* phead)
{SLTNode* cur = phead;while (cur){printf("%d ", cur->data);cur = cur->next;}printf("\n");
}void SListDestroy(SLTNode** pphead)
{// 这个链表是// 链表的空间必须遍历回收,因为申请时候就不连续SLTNode* cur = *pphead;SLTNode* next = cur->next;// 记录下一个节点的位置while (next){free(cur);cur = next;next = cur->next;}*pphead = NULL;
}//申请新节点
SLTNode* BuyListNode(SListDataType x)
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if (newnode == NULL){printf("malloc failed\n");exit(-1);}newnode->data = x;newnode->next = NULL;return newnode;
}void SListPushBack(SLTNode** pphead, SListDataType x)
{assert(pphead);SLTNode* newnode = BuyListNode(x);//1.空链表 - 尾插头结点的地址pList发生改变,因此需要传pList的地址// **ppheadif (*pphead == NULL){*pphead = newnode;return;}//找尾SLTNode* tail = *pphead;while (tail->next != NULL){tail = tail->next;}tail->next = newnode;
}int main()
{//根据需求尾插构造一个即可return 0;
}

http://chatgpt.dhexx.cn/article/GEGR4Dv8.shtml

相关文章

链表知识点总结

目录 一、基本概念&#xff1a; 1.定义&#xff1a; 2.性质&#xff1a; 3.链表的分类&#xff1a; 单链表&#xff1a; 双向链表 单链表和双向链表的区别&#xff1a; 双向链表的作用&#xff1a; 循环链表 二、链表的主要操作&#xff1a; 1.插入操作&#xff1a; a.重…

二级指针实现单链表的插入、删除及 linux内核源码双向链表之奇技

二级指针实现单链表的插入、删除 今天看了coolshell上关于二级指针删除单链表节点的文章。 文章中Linus 举例&#xff1a; 例如&#xff0c;我见过很多人在删除一个单项链表的时候&#xff0c;维护了一个”prev”表项指针&#xff0c;然后删除当前表项&#xff0c;就像这样…

C++实现链表

C实现链表 众所周知&#xff0c;C/C语言实现的链表是由一个一个的结点构成&#xff0c;每个结点分为数据域和指针域&#xff0c;指针域中存储了其后继结点的地址&#xff0c;通过地址来访问下一个结点。 链表是一系列节点串联形成的数据结构&#xff0c;链表存储有序的元素集合…

2130. 链表最大孪生和

地址&#xff1a; 力扣https://leetcode-cn.com/problems/maximum-twin-sum-of-a-linked-list/ 题目&#xff1a; 在一个大小为 n 且 n 为 偶数 的链表中&#xff0c;对于 0 < i < (n / 2) - 1 的 i &#xff0c;第 i 个节点&#xff08;下标从 0 开始&#xff09;的孪…

链表基础【C++实现】

平台&#xff1a;Visual Studio 2022 编程工具&#xff1a;C 目录&#xff1a; 1、链表的结构体实现 2、链表的声明、开辟空间 3、链表的初始化 4、链表的连接 5、链表输出 6、完整代码实例 1、链表的结构体实现 链表由一系列结点&#xff08;链表中每一个元素称为结点&#…

体能修复6-编程-剑指offer-JZ22 链表中倒数最后k个结点

描述 输入一个长度为的链表&#xff0c;设链表中的元素的值为&#xff0c;返回该链表中倒数第个节点。 如果该链表长度小于&#xff0c;请返回一个长度为的链表。 数据范围:&#xff0c;&#xff0c; 要求&#xff1a;空间复杂度&#xff0c;时间复杂度 进阶&#xff1a;空…

Niuke:JZ36.二叉树与双向链表

文章目录 &#xff2e;iuke:JZ36.二叉树与双向链表题目描述示例思路分析代码实现 &#xff2e;iuke:JZ36.二叉树与双向链表 题目描述 描述 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 注意: 1.要求不能创建任何新的结点&#xff0c;…

【C/C++ 数据结构】-链表(OJ题)(4)

文章目录 题一&#xff1a;反转链表法1&#xff1a;指针反向法2&#xff1a;指针翻转法3&#xff1a;头插法 题二&#xff1a;链表的中间节点法1&#xff1a;统计节点减半法法2&#xff1a;快慢指针法 题三&#xff1a;合并两个有序链表法1&#xff1a;tail拼接法法2&#xff1…

链表面试常见考题(C++实现)

链表面试常见考题&#xff08;C实现&#xff09; 常用方法&#xff1a;画图法 常用技巧&#xff1a;用于遍历搜索的游标 ListNode* cur; 用于返回值的哑节点 ListNode* dumny new ,, 单链表更新先去考虑他的next指向问题。链表元素或者边界问题可以用前继节点pre、后继节点…

剑指offer(C++)-JZ22:链表中倒数最后k个结点(数据结构-链表)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为 ai &#xff0c;返回该链表中倒数第k个节点。…

单链表(带头结点)的存储结构与基本操作(c语言)------亲测可用

编程语言&#xff1a;c语言 编译环境&#xff1a;Dev-c 实现功能&#xff1a;实现功能&#xff1a;单链表&#xff08;带头结点&#xff09;结点结构体的定义&#xff0c;单链表&#xff08;带头结点&#xff09;初始化、求元素个数、插入元素、删除元素、取元素、打印所有元素…

链表OJ归纳总结 ------- C语言

一、移除链表元素 OJ链接https://leetcode.cn/problems/remove-linked-list-elements/submissions/ 1.1. | 解题思路 | 创建一个新的哨兵头节点 guard&#xff0c;创建尾节点 tail&#xff0c;创建 cur 用于遍历原链表数据。 对原链表进行遍历&#xff0c;若 cur->val ! v…

【链表复习】C++ 链表复习及题目解析 (2)

目录 牛客 CM11 链表分割 牛客 OR36 之链表的回文结构 Leetcode 160. 相交链表 LeetCode 141. 环形链表 LeetCode 138. 复制带随机指针的链表 本文继续延续前文&#xff0c;为大家带来几道经典的链表中等难度的题目。 牛客 CM11 链表分割 现有一链表的头指针 ListNode* p…

【链表OJ题(三)】链表中倒数第k个结点

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;数据结构 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 链表OJ题(三)1. 链表…

【20230205】链表小结

链表&#xff08;list&#xff09; 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个节点的指针域指向null&#xff0c;链表的入口节点称…

【链表复习】C++ 链表复习及题目解析 (3)

目录 剑指offer 中的链表题目 JZ6 从尾到头打印链表 JZ18 删除链表的结点 JZ24 反转链表 JZ25 合并两个排序的链表 JZ52 两个链表的第一个公共结点 JZ23 链表中环的入口结点 JZ22 链表中倒数第k 个结点 JZ35 复杂链表的复制 JZ76 删除链表中重复的结点 本次给大家带来…

【023】C/C++数据结构之链表及其实战应用

C 链表及其实战应用 引言一、链表的概述二、利用链表设计一个学生管理系统2.1、设计主函数main()2.2、实现插入节点2.3、实现链表的遍历2.4、实现链表的查找2.5、实现删除某个节点2.6、实现释放链表2.7、完整代码 总结 引言 &#x1f4a1; 作者简介&#xff1a;专注于C/C高性能…

KNN分类算法详解

参考&#xff1a;https://www.cnblogs.com/listenfwind/p/10311496.html https://www.cnblogs.com/listenfwind/p/10685192.html 1. 概述 KNN 可以说是最简单的分类算法之一&#xff0c;同时&#xff0c;它也是最常用的分类算法之一。注意&#xff1a;KNN 算法是有监督学习中的…

【python代码实现】朴素贝叶斯分类算法

目录 前置知识1、概念2、算法原理2.1、条件概率2.2、全概率2.3、先验概率2.4、后验概率 朴素贝叶斯分类算法1、构建数据集2、分类概率3、条件概率4、先验概率 前置知识 1、概念 上一篇我们讲到的决策树算法&#xff0c;是反映了一种非常明确、固定的判断选择过程&#xff0c;…

分类算法-KNN(原理+代码+结果)

KNN&#xff0c;即K最邻近算法&#xff0c;是数据挖掘分类技术中比较简单的方法之一&#xff0c;简单来说&#xff0c;就是根据“最邻近”这一特征对样本进行分类。 1、K-means和KNN区别 K-means是一种比较经典的聚类算法&#xff0c;本质上是无监督学习&#xff0c;而KNN是分…