LeetCode—206. 反转链表
01题目描述:
反转一个单链表。
示例
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
02题目分析:
1、就是把链表全部反转。就是把原本前面指向后面的变成后面指向前面。就是相当于按照顺序取出原本列表里面的元素,然后在链表前面一次插入。也可以尝试用栈来做。
把链表1 -> 2 -> 3 -> 4 -> 5 -> Null
反转成为 Null -> 5 -> 4 -> 3 -> 2 -> 1
。
这时候就是需要一个cur
表示遍历到的每一个当前节点,pre
表示先驱节点,同时还需要一个变量temp
表示后驱节点。
中间量
cur.next
,prev
,cur
,temp
这几个变量在中间产生的数据,看看,方便理解!!
流程
-
首先
pre
和cur
分布指向Null
和head
-
当
cur != Null
,执行循环体内容- 先将
cur.next
保存在 temp 中防止链表丢失:temp = cur.next
- 接着把
cur.next
指向前驱节点prev
:cur.next = prev
。这一个前驱节点是原本的前驱节点,是作为我们输出反转之后的链表的后继节点使用的。 - 然后将
prev
往后移一位也就是移到当前cur
的位置:prev = cur
。这个就是我们最后要输出的反转之后的链表。把cur
赋值给prev
.因为我们在前面是cur.next = prev
,prev
就是前面输出的前序,所以cur
在逐步的生成反转的链表 - 最后把
cur
也往后移一位也就是temp
的位置:cur = temp
。最后就是把我们保存的还没有使用的部分链表重新赋值给cur
,然后带入下一次的循环。
- 先将
-
当
cur == Null
,结束循环,返回prev
。
03解答:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
prev = None
cur = head
while cur:
# 这一个保存是为防止链表的丢失
temp = cur.next # [2,3,4,5] [3,4,5]
cur.next = prev # None 1
prev = cur # None [1 None]
cur = temp # [2,3,4,5] [3,4,5]
return prev
运行结果:
3.1耗时分布情况
3.2内存使用情况
04结语:
个人记录,新手入门,多多学习,欢迎大家交流探讨!
个人网站: http://106.54.78.238/
song_of _sea的个人网站 http://106.54.78.238/