数据结构:链表(2)

目录

一、链表进阶函数

函数①:找中间节点

函数②:找倒数第k个节点

函数③:链表的倒置

函数④:链表的冒泡排序【约40行】

函数⑤:链表的选择排序(每一轮选一个最小的放前边)【36行】

[函数⑥: 判断链表是否有环、环有多大(获得环长)、环入口位置【知道思想即可】](#函数⑥: 判断链表是否有环、环有多大(获得环长)、环入口位置【知道思想即可】)


一、链表进阶函数

函数①:找中间节点

分析:先定义两个空指针(一个快指针一个慢指针)指向链表第一个有效元素,再使快指针后移两个节点慢指针后移一个节点,重复移动的步骤,直到快指针指向空,则慢指针指向链表的中间
代码:

结果:

函数②:找倒数第k个节点

分析:先定义两个空指针(一个快指针一个慢指针)指向链表第一个有效元素,再使快指针后移k个节点,r再使两个指针同时后移,直到快指针指向空,则慢指针指向链表倒数第k个节点
代码

结果

函数③:链表的倒置

代码

调用

结果

函数④:链表的冒泡排序【约40行】

分析:定义两个指针(前指针和后指针),分别指向第二个有效节点和第一个有效节点,若前比后大,则只交换数据(节点存的地址不变),这两个指针后移一个节点,如此往复便执行完一轮...


代码

调用

结果

函数⑤:链表的选择排序(每一轮选一个最小的放前边)【36行】

分析

其核心思想与数组的选择排序一脉相承,都是反复从待排序序列中找出最小(或最大)元素,将其放到每一轮最前边

代码

调用

结果

函数⑥: 判断链表是否有环、环有多大(获得环长)、环入口位置【知道思想即可】

分析

判断链表是否有环:快指针走2步,慢指针走1步,两个指针相遇即为有环

环有多大(获得环长):从相遇点走一圈,计数

环入口位置:两个指针,一个指针指向开头,一个指针指向相遇点,两个指针都同时向后走,相遇点即为环入口位置

相关推荐
im_AMBER8 分钟前
Leetcode 152 被围绕的区域 | 岛屿数量
数据结构·算法·leetcode·深度优先·广度优先·图搜索算法
吕司19 分钟前
LeetCode Hot Code——最大子数组和
数据结构·算法·leetcode
海清河晏11124 分钟前
数据结构 | 单链表
数据结构·unity·dreamweaver
itman30142 分钟前
C语言errno.h头文件:错误处理机制及errno变量特点说明
c语言·错误码·库函数·错误处理·errno.h
爱编码的小八嘎1 小时前
C语言完美演绎7-2
c语言
笨笨饿1 小时前
32_复变函数在工程中实际应用区别于联系
linux·服务器·c语言·人工智能·单片机·算法·学习方法
会编程的土豆1 小时前
【数据结构与算法】拓扑排序2
数据结构·算法·leetcode
来自远方的老作者1 小时前
第7章 运算符-7.5 比较运算符
开发语言·数据结构·python·算法·代码规范·比较运算符
圣光SG2 小时前
数据结构通用笔记(语言无关)
数据结构·学习·链表·数组··队列
爱编码的小八嘎2 小时前
C语言完美演绎7-3
c语言