图解 LeetCode206:反转吧,链表!
Posted Rocky0429
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解 LeetCode206:反转吧,链表!相关的知识,希望对你有一定的参考价值。
大家好呀,我是蛋蛋。
今天整反转链表,它没有太多思维上的难度,但是出现频率极高。
可以这么说,不管什么时候,只要考到链表,反转链表都属于必考项。
话不多说,直接开工。
LeetCode 206:反转链表
题意
给出单链表的头节点 head,反转链表,返回反转后的链表。
示例
输入:head = [1, 2, 3, 4, 5]
输出:[5, 4, 3, 2, 1]
注意,如果是空链表
输入:head = []
输出:[]
提示
0 <= 链表节点数 <= 5000
-5000 <= Node.val <= 5000
题目解析
水题,难度简单。
题目没有思维上的难度,就是把每个节点的 next 指向它的前驱节点即可。
主要考察臭宝写代码的能力。
图解
这个题是将当前 next 节点的指针指向它的前驱节点,这就需要得有两个指针:一个指向当前节点,一个指向前驱节点。
如果只有这俩的话又不对,因为当 p 的 next 指针指向前驱节点 q 的时候,上图就会变成这样:
所以此时应该还需要一个临时指针 temp,保存当前节点的后继节点,也就是如下图:
所以现在成了,先找到 temp,然后 p.next 再指向 q,最后 q,p 同时右移。
如此反复,直至全部结束。
本方法遍历一遍链表,所以时间复杂度为 O(n),需要了额外的 3 个指针,空间复杂度为 O(1)。
代码实现
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
# 空链表或者只有一个节点,直接返回
if not head or head.next == None:
return head
# 初始化记录当前节点 p 和前驱节点 q
p = head
q = None
while p:
temp = p.next
p.next = q
q = p
p = temp
# 最后一步,p 肯定是指向 NULL,所以返回 q 作为新的头指针
return q
好啦,图解反转链表到这就结束啦。
还是那句话,这类题思维上没难度,考的是代码实现,臭宝们一定要多多练习,代码熟记,最好形成肌肉记忆。
看到这的都是真爱,一键三连让我飘起来!
我是帅蛋,我们下次见!
以上是关于图解 LeetCode206:反转吧,链表!的主要内容,如果未能解决你的问题,请参考以下文章
手绘漫画图解LeetCode之反转链表(LeetCode206题)