☰
《链表常见手撕代码总结》
2026/10/15 3:20:22 网站建设 项目流程

1.一个单链表,如何操作将整个链表进行反转?

方式一:使用Stack栈

创建 Stack<Integer> 保存链表结点数据,遍历原链表将所有数据入栈,再新建结果链表,不断弹出栈顶元素尾插进新链表,以此完成链表反转。

核心代码实现

方式二:原地反转

初始化pre为空、cur指向链表头,遍历链表,先用temp保存当前结点的后继,将当前结点反向指向pre,再依次移动pre和cur;遍历结束,pre就是反转后的链表头,实现原地反转。

核心代码实现

2.判断链表是否有环

方式一:用Set集合检查链表中是否存在重复的节点对象

新建一个HashSet集合,从头开始遍历链表,每访问一个结点就尝试把结点对象存入集合;如果添加失败,说明该结点之前访问过,链表存在环;若遍历走到null结束,则链表无环。

方式二:使用快慢指针

设置快慢指针都从头结点出发;慢指针每次移动一步,快指针每次移动两步;若无环,快指针先抵达链表末尾;若存在环,快指针会在环内追上慢指针,两指针相遇,以此判断链表是否含有环。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询