数据结构:单向链表、双向链表
一、单向链表
(一)链表的查找
(二)链表的修改
(三)尾插法:申请的节点地址赋值NULL
(四)链表的销毁:定义指针pfreenode和指针ptmpnode指向头节点,ptmpnode向后走,然后释放pfreenode指向的节点,最后将pfreenode指向ptmpnode的空间
(五)查找链表的中间节点:满指针走一步快指针走两步
(六)查找链表的倒数第k个节点:快慢指针相差k
(七)不知道头节点地址如何删除链表中间节点:用下一个节点覆盖要删的节点,然后删除下一个节点
(八)链表的倒置:将头节点断开,其他元素用头插法插入即可
(九)链表的排序
1.冒泡排序:定义两个指针,相邻元素比较,大的往后排。ptmpnode2为NULL,即等于pend,循环结束,pend赋值为ptmpnode1的节点地址。
2.选择排序
(十)判断是否有环、计算环长、找到环入口
1.判断是否有环:定义两个指针一个快指针每次走两步,慢指针每次走一步。快指针-慢指针==环长,即相遇。快指针和慢指针相等即链表有环
2.计算环长:定义一个指针从相遇点走一圈,计数即可得到环长
3.找环入口:定义两个指针一个从相遇点走,一个从开始走,相遇位置即为环入口位置
二、双向链表(参考单向链表)
(一)节点定义
(二)创建
(三)链表的头插法