【剑指 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;
}
}
这两种方法各有优劣,三指针法在空间复杂度上更优,而头插法则更简洁易懂。读者可以根据具体需求选择合适的方法。
热门推荐
Revit如何创建出色的效果图?
方寸之间演绎刀尖绝活:走进国家级非遗潮州木雕传承人辜柳希工作室
Excel根据单元格颜色求和,最后一种方法最为简单方便
八大建筑央企经营数据一览
公募基金经理近一年收益排名揭晓!翟相栋、王晓川分别夺冠!
王者荣耀阿古朵最强出装铭文全玩法汇总
海员劳动合同签订指南:从基本原则到具体操作
痛心!神外专家修波意外去世,曾开展超100例嗅球干细胞移植治疗脊髓损伤手术
虚拟机当前大小如何增大
髓母细胞瘤是怎样造成的
从文化视角解读催婚现象背后的社会变迁
免赔是什么意思(保险合同里的免赔到底是怎么计算的?)
如何识别链条型号?链条识别有哪些方法?
为什么海绵拖把会发硬?如何正确清洗海绵拖把?
宠物被咬伤后的正确处理方法与预防措施
光伏钙钛矿技术发展提速
皮肤瘙痒症怎样治疗效果好
环京第一条地铁-京雄快线(R1线)进入二次结构施工阶段!
做完全飞秒手术后注意事项
国内找律师咨询费用多少:法律服务收费的解析与指南
掌握查询技巧,轻松查看自己的社保信息
一文读懂足内翻的康复训练
美版苹果手机有锁和无锁的区别,如何选择最适合你的?
保障食品安全,防患于未然
国家CCC认证标准更新:最新配电箱CCC认证要求详解
二手房不通过中介怎样付款最安全
高铁锂电池携带规定:容量限制与安全要求全解析
丁香的施肥方法
小米雷军任命两位女总裁,背后有何深意?
痰涂片、痰培养、药敏试验,下呼吸道感染如何检查化验?