【剑指 Offer】反转链表的两种解法
创作时间:
作者:
@小白创作中心
【剑指 Offer】反转链表的两种解法
引用
CSDN
1.
https://m.blog.csdn.net/m0_67660672/article/details/141144059
链表是计算机科学中常用的一种数据结构,而反转链表则是链表操作中的一个经典问题。本文将详细介绍两种常见的链表反转方法:三指针法和头插法,并通过具体的代码实现帮助读者理解这两种方法的原理和应用。
问题描述
给定一个单链表的头结点 pHead(该头节点是有值的,比如在下图,它的 val 是 1),长度为 n,反转该链表后,返回新链表的表头。
解题思路
反转链表有多种解法,这里介绍两种常见的方法:
- 定义三个指针,整体右移,边移动边翻转,保证不会断链。
- 采用头插思想进行翻转。
方法一:三指针法
这种方法通过三个指针 first、second 和 third 来实现链表的反转。具体步骤如下:
- 初始化三个指针分别指向链表的第一个、第二个和第三个节点。
- 在循环中,将
second指针指向的节点的next指针指向first,实现局部反转。 - 然后将三个指针整体后移一位。
- 当
third指针为null时,说明已经到达链表尾部,此时需要处理最后两个节点的反转关系,并将原链表头节点的next指针置为null。
以下是具体的代码实现:
public class Solution {
public ListNode ReverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
// 不带头结点,至少有2个节点
ListNode first = head; // 指向第一个节点
ListNode second = first.next; // 指向第二个节点
ListNode third = second.next; // 指向第三个节点,可能为null
while (third != null) {
// 翻转
second.next = first;
// 指针整体后移
first = second;
second = third;
third = third.next;
}
second.next = first; // 当传入的链表只有两个节点 or 上述翻转结束时,最后一个节点并未翻转
head.next = null; // 曾经的第一个节点,next并不是null,设置一下
head = second; // 头指针指向最后一个节点
return head;
}
}
方法二:头插法
这种方法通过一个新链表 new_head 来实现链表的反转。具体步骤如下:
- 初始化一个空的新链表头节点
new_head。 - 在循环中,每次从原链表中取出第一个节点,并将其插入到新链表的头部。
- 重复上述过程,直到原链表为空。
以下是具体的代码实现:
public class Solution {
public ListNode ReverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode new_head = null;
while (head != null) {
// 先从原链表中去掉第一个节点
ListNode p = head;
head = head.next;
// 再将p标识的节点头查到新链表
p.next = new_head;
new_head = p;
}
head = new_head;
return head;
}
}
这两种方法各有优劣,三指针法在空间复杂度上更优,而头插法则更简洁易懂。读者可以根据具体需求选择合适的方法。
热门推荐
机器人板块再掀涨停潮,人形机器人公司迎上百家机构调研
食用碱放肉里有什么作用?揭秘食用碱对肉质的神奇作用
买车容易修车难,新能源车现维修困局:涨薪20%仍难觅“靠谱”维修人
一图看懂2024勒芒24小时耐力赛
以科力股份为例分析北交所打新策略
人参:在炮制之下的药用奥秘
喝苹果醋有什么好处
品味江苏风情:生煎小吃的独特魅力与故事
袁崇焕被定的罪名及影响
皖南川藏线自驾游最佳路线,一、二日游行程安排(附景点推荐)
公共场合卫生安全与健康
便血背后暗藏健康危机?痔疮、肛裂、息肉,别再忽视这些信号!
韩国足球崛起:6年前排名低于国足,如今成绩显著提升
教师资格考试笔试需要准备哪些教材?
劳动合同违约金如何仲裁
7-Zip解压缩软件使用攻略:从基础到进阶的详细指南
羽毛球队训练计划
关羽之子关索:历史与传说中的突然消失
房地产营销新趋势:数字化转型与传统营销的融合之道
让电动车电池多使用2年,行内人告诉你选购技巧及延长寿命的方法
美国十大著名桥梁,见证工程奇迹与历史变迁
沙海之中漾碧波——探秘世界遗产巴丹吉林沙漠—沙山湖泊群
极限生产速度每年10艘以上的航空攻击舰!一文解答你对076型的所有疑问
多名百万级网红被封号,“无底线博流量”专项治理力度加大
许柳田医师和他的祛痘方略——痤疮6型辨证治疗法!
关于PCB过孔设计的这些知识,你都掌握了吗?
柳叶刀子刊:人工智能将重塑糖尿病护理的未来
喝山楂水有什么功效与作用
关于课外阅读的名言
人血浆IgG分离纯化实验操作指南