Skip to content

反转链表

理解题目:

题目要求反转一个单链表。

代码实现:

public class ReverseLinkedList {
    // 反转链表
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;

        while (curr != null) {
            ListNode nextTemp = curr.next; // 临时保存下一个节点
            curr.next = prev; // 当前节点指向前一个节点
            prev = curr; // 前一个节点指向当前节点
            curr = nextTemp; // 当前节点移动到下一个节点
        }

        return prev; // 返回反转后的头节点
    }
}

步骤解释:

  1. 初始化两个指针 prevcurr,分别指向 null 和链表头部。

  2. 在循环中,对当前节点 curr 进行反转操作:

  3. 先临时保存当前节点的下一个节点 nextTemp
  4. 将当前节点的 next 指针指向 prev,完成反转。
  5. prev 指针指向当前节点 curr,为下一次迭代做准备。
  6. 将当前节点 curr 移动到下一个节点 nextTemp

  7. 当循环结束时,返回反转后的头节点 prev

时间复杂度: 遍历一次链表,时间复杂度为 O(n),其中 n 是链表的长度。

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