Featured image of post reverseLinkedList

reverseLinkedList

206. 反转链表

分析

  1. 初始化指针

    • 定义一个指针 prev,初始值为 nullptr,用于指向反转后链表的头节点
    • 定义一个指针 cur,初始指向链表的头节点 head,用于遍历链表
  2. 遍历链表

    • 在遍历的每一步,保存当前节点的下一节点 next
    • 调整当前节点 curnext 指针,使其指向 prev,实现反转
    • prev 更新为当前节点 cur,将 cur 更新为 next
  3. 终止条件

    • cur 遍历到链表末尾(即为 nullptr )时,链表已经完全反转,此时 prev 指针指向反转后的链表头节点

时间复杂度

时间复杂度 O(n),其中 n 为链表的长度。每个节点访问一次

空间复杂度

空间复杂度为 O(1)

C++代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class Solution
{
public:
    ListNode* reverseList(ListNode* head)
    {
        ListNode* prev = nullptr;  // 初始化反转链表的头节点为 nullptr
        ListNode* cur = head;      // 从链表头节点开始遍历
        while (cur)                // 遍历整个链表
        {
            ListNode* next = cur->next; // 保存当前节点的下一节点
            cur->next = prev;          // 将当前节点的 next 指向反转链表的头
            prev = cur;                // 更新 prev 为当前节点
            cur = next;                // 继续遍历下一个节点
        }
        return prev;                   // 返回反转后的链表头节点
    }
};
Built with Hugo
Theme Stack designed by Jimmy