📜  算法|杂项|问题10(1)

📅  最后修改于: 2023-12-03 14:56:43.363000             🧑  作者: Mango

算法 | 杂项 | 问题10

这里介绍一道常见的算法问题:反转链表。

问题描述

给定一个链表的头节点 head,将其反转后返回新的头节点。

解决思路

我们可以通过遍历链表来逐步将链表中的元素反转过来。具体的思路如下:

  1. 初始化三个指针 pre、cur、next,初始时 pre 为 NULL,cur 为 head。
  2. 遍历链表,对于每个节点,将它的 next 指向 pre,然后将 pre、cur、next 向后移动一位。
  3. 当 cur 为空时,表明链表已经全部反转完成,此时将 head 指向 pre,并返回 head。

代码实现

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def reverseList(head: ListNode) -> ListNode:
    pre, cur, next = None, head, None
    while cur:
        next = cur.next
        cur.next = pre
        pre, cur = cur, next
    return pre

复杂度分析

时间复杂度:O(n),其中 n 为链表的长度。因为每个节点只遍历一次即可,总共需要遍历 n 个节点。

空间复杂度:O(1),只用到了常数级别的额外空间。