输出链表中间的元素
- 方法1(遍历链表两次)
- 遍历链表一次,得到链表的长度n。
- 再次遍历链表,输出n/2位置的元素。
- 方法2(遍历链表一次)
- 创建两个节点slow和fast。
- 每次移动fast指针遍历两个节点;每次移动slow指针变量一个节点。
- 当fast指针指向NULL(链表有偶数个节点),或者fast为NULL(链表有奇数个节点)时,slow节点就是链表的中间节点。
C++程序实现(方法2),时间复杂度为
:
#include
翻转链表
- 算法中需要使用三个指针变量:
- p - 用于保存前向节点。
- c - 用于保存当前节点。
- n - 用于保存下一个节点。
- p=c, c=n
- 对每个节点重复上述步骤
- head=p
C++程序源码如下,时间复杂度为
:
#include
判断链表中是否有环
- 设置两个指针变量slow和fast,起初他们都是指向head节点。
- 在遍历链表时,slow每次遍历两个节点,fast每次遍历一个节点。
- 如果fast或者fast指向的地址为NULL,就表明已经遍历到链表的末尾,且链表没有环。
- 如果slow和fast节点最终相遇了,则表明链表中存在环。
int