【Leetcode】206. 反转链表(Reverse Linked List)

No206. 反转链表

题目

反转一个单链表。

示例

  • 输入: 1->2->3->4->5->NULL
  • 输出: 5->4->3->2->1->NULL

进阶

你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

思路1

  1. 第一次遍历,存数据;
  2. 第二次遍历,改数据;

解题代码(Python3)

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        result = []

        p = head
        while p:
            result.append(p.val)
            p = p.next
        
        p = head
        i = 0
        while p:
            p.val = result[-1-i]
            i += 1
            p = p.next

        return head

复杂度分析:

  • 时间复杂度 O(n)
  • 空间复杂度 O(n) 需要额外的空间储存元素

运行结果

在这里插入图片描述

思路2

迭代,构造类双向列表改变指针方向达成目的:

  1. 用pNext存储当前结点的下一个结点
  2. 改变head.next为prev,prev为head,head为pNext

解题代码(Python3)

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        prev = None
        while head:
            pNext = head.next
            head.next,prev,head = prev,head,pNext
        return prev

复杂度分析

  • 时间复杂度 O(n)
  • 空间复杂度 O(1)

运行结果

在这里插入图片描述

你可能感兴趣的:(霍乱时期的Python之路,python,算法,leetcode)