LeetCode 206 - 反转链表

发布时间:2024年01月15日

LeetCode 206 - 反转链表

题目描述

给定一个单链表的头节点 head,反转该链表并返回反转后的链表。

解题思路

我们可以使用迭代或递归的方式来反转链表。

迭代法

  1. 初始化三个指针 curprenext
  2. 遍历链表,将 cur.next 指向 pre,然后将 precur 向前移动一步。
  3. 重复上述步骤,直到 cur 到达链表末尾。

递归法

  1. 递归到链表末尾,返回链表末尾节点。
  2. 在递归的回溯过程中,将当前节点的 next 指针指向当前节点,并将当前节点的 next 置空。
  3. 最终返回新的头节点。

解法示例

迭代法

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur = head;
        ListNode pre = null;
        while (cur != null) {
            ListNode next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
}

递归法

class Solution {
    public ListNode reverseList(ListNode head) {
       if (head == null || head.next == null) {
           return head;
       }
       ListNode newHead = reverseList(head.next);
       head.next.next = head;
       head.next = null;
       return newHead;
    }
}

复杂度分析

迭代法

  • 时间复杂度:O(n),其中 n 是链表的长度。
  • 空间复杂度:O(1)。

递归法

  • 时间复杂度:O(n)。
  • 空间复杂度:O(n),递归调用栈的深度。

文章来源:https://blog.csdn.net/weixin_40185596/article/details/135611913
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。