图解LeetCode——206. 反转链表

简介: 图解LeetCode——206. 反转链表

一、题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

二、示例

2.1> 示例 1:

输入】head = [1,2,3,4,5]

输出】[5,4,3,2,1]

2.2> 示例 2:

输入】head = [1,2]

输出】[2,1]

2.3> 示例 3:

输入】head = []

输出】[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

三、解题思路

3.1> 思路1:迭代方式

针对链表反转操作,我们首先可以选择采用迭代的方式进行转换,即,每当遍历两个节点的时候,我们都将next指针反转执行前置节点即可,此处需要注意的是,由于我们要修改next指针,所以,遍历的时候,我们要先将原本的next指针指向的对象进行缓存,然后再改变next指针。这么做的目的就是为了继续可以向后去执行遍历操作。具体操作方式请见下图所示:

3.2> 思路2:递归方式

根据题目描述,我们要将原链表执行翻转操作。那么,由于单向链表的单一方向性,我们如果想翻转链表,可以采取递归的方式进行处理,具体逻辑如下所示:

步骤1】每次递归都要将head.next节点作为方法的入参进行传递。

步骤2】当传入的节点为null或者它的next节点为null,则直接返回该节点。

步骤3】当遍历到最后一个节点的时候,就可以进行两个节点之间的链表反转操作了。

四、代码实现

4.1> 实现1:迭代方式

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null, temp = null;
        while (head != null) {
            temp = head.next;
            head.next = pre;
            pre = head;
            head = temp;
        }
        return pre;
    }
}

4.2> 实现2:递归方式

class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) return head;
        ListNode node = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return node;
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

相关文章
|
算法 Go
【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 23——合并 K 个升序链表的两种解法:优先队列(最小堆)和分治合并。题目要求将多个已排序链表合并为一个升序链表。最小堆方法通过维护节点优先级快速选择最小值,;分治合并则采用归并思想两两合并链表。文章提供了 Go 语言实现代码,并对比分析两种方法的适用场景,帮助读者深入理解链表操作与算法设计。
551 10
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
269 1
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
395 0
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
251 0
LeetCode第二十四题(两两交换链表中的节点)
Leetcode第21题(合并两个有序链表)
这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
323 0
Leetcode第21题(合并两个有序链表)
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
330 0
Leetcode第十九题(删除链表的倒数第N个节点)
【LeetCode 10】142. 环形链表 II
【LeetCode 10】142. 环形链表 II
218 0
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
294 0
【LeetCode 08】206 反转链表
【LeetCode 08】206 反转链表
156 0
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
223 0