LeetCode刷题(0006)---206. 反转链表

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.nextprevcurtemp 这几个变量在中间产生的数据,看看,方便理解!!
在这里插入图片描述

流程

  • 首先 precur 分布指向Nullhead

  • cur != Null,执行循环体内容

    • 先将 cur.next 保存在 temp 中防止链表丢失: temp = cur.next
    • 接着把 cur.next 指向前驱节点 prevcur.next = prev 。这一个前驱节点是原本的前驱节点,是作为我们输出反转之后的链表的后继节点使用的。
    • 然后将 prev 往后移一位也就是移到当前 cur 的位置: prev = cur 。这个就是我们最后要输出的反转之后的链表。把cur赋值给prev.因为我们在前面是cur.next = prevprev就是前面输出的前序,所以 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/

猜你喜欢

转载自blog.csdn.net/weixin_44824717/article/details/107979788