实现链表反转,你学会了吗?
时间:2025-11-05 07:27:52 出处:数据库阅读(143)
有一个链表,实现如何将其反转并获取反转后的链表链表头节点?本文将分享一种解决方案,欢迎各位感兴趣的反转开发者阅读本文。
思路分析经过数据结构基础的实现学习,我们知道链表中每个节点都会有一个指针,链表用于指向它的反转下一个节点,那么,实现我们只需要从链表头部开始遍历,链表逐一修改它的反转指针指向至其上一个节点,即可完成链表的实现反转。
这个思路的链表难点在于如何调整指针的指向,我们可以借助3个指针来完成这个操作,反转如下所示:
p1、实现p3分别是链表p2指针的上、下一个节点(默认指向null)如果p2指针指向的反转节点不为null获取p2指针指向的下一个节点,将其保存至p3
如果p3的值为null,则表示链表已经反转完毕,用一个变量存储p2的值
修改p2指针的云南idc服务商指向至p1,修改p1的值为p2,修改p2的值为p3

通过上面的分析,我们分析出了可以用三指针来解决问题的思路,接下来,我们来看下代码实现。
首先,设计一个名为ReverseLinkedList的类:
内部有2个私有变量。pPrev p1指针
pNode p2指针
构造方法接受1个参数:链表头节点。对参数进行校验。
初始化p2指针指向为链表头节点,p1指针的指向为null。
export class ReverseLinkedList {
// p1指针
private pPrev: ListNode | null;
// p2指针
private pNode: ListNode | null;
constructor(listHead: ListNode) {
if (listHead == null) {
throw new Error("链表头节点不能为空");
}
this.pNode = listHead;
this.pPrev = null;
}
}上述代码中,我们用了一个自定义类型ListNode,它描述了一个链表的节点应该包含哪些属性,对此感兴趣的开发者请移步我的另一篇文章:链表与变相链表的实现。
紧接着,实现链表反转函数:
声明一个变量用于存储反转后的链表头指针。移动p2指针,开始遍历链表。源码库存储p2指针的下一个节点至p3。
判断p2指针是否为走到链表末尾,条件成立就修改存储p2节点至反转后的链表头指针变量。
修改p2指针的指向至p1,修改p1的值为p2,修改p2的值为p3。
p2指针指向null,返回得到的链表头节点。 reverseList(): ListNode | null {
// 反转后的链表头指针
let pReversedHead: ListNode | null = null;
while (this.pNode != null) {
// p3指针
const pNext = this.pNode.next;
if (pNext == null) {
pReversedHead = this.pNode;
}
this.pNode.next = this.pPrev;
this.pPrev = this.pNode;
this.pNode = pNext;
}
return pReversedHead;
}完整代码请移步:ReverseLinkedList.ts
测试用例接下来,我们将前言中的例子代入上个章节所实现的函数中,验证下它能否得出正确的结果。
const linkedList = new LinkedList();
linkedList.push(1);
linkedList.push(3);
linkedList.push(8);
linkedList.push(9);
linkedList.push(12);
linkedList.push(18);
const reverseLinkedList = new ReverseLinkedList(linkedList.getHead());
const result = reverseLinkedList.reverseList();
console.log("反转后的链表头节点为", result);
运行结果如下所示,成功的解决了文章前言中所讲的问题。

完整代码请移步:reverseLinkedList-test.ts
示例代码:本文所列举的代码,其完整版请移步
猜你喜欢
- 适马30mmf1.4镜头的魅力与表现(探索适马30mmf1.4镜头的优点和应用领域)
- 小新310-15的性能和使用体验如何?(一款性价比超高的笔记本电脑)
- 亿播云盒的特点与优势(探索亿播云盒的全新体验)
- Word批注模式的关闭与使用技巧(轻松掌握Word批注模式的开关方法,提高文档编辑效率)
- 电脑经常出现10061错误的原因及解决方法(深入探讨10061错误,帮助您解决电脑连接问题)
- 小智技术在人工智能领域的应用与发展(探索人工智能时代的新前沿,小智技术引领未来科技发展)
- HidizsAP100(重新定义音乐体验的高端设备)
- 提高手机运行速度的方法(优化手机性能,让手机更快速运行)
- 使用U盘安装固态硬盘系统教程(一步步教你如何将系统安装到固态硬盘上)