翻转单链表

1. LeetCode 206. Reverse Linked List

2. 描述:

反转单链表

3. 迭代法:

时间复杂度O(n), 空间复杂度O(1) 原理就是将node的next节点指向它之前的节点,由于单链表中不存储previous节点,所以要提前存储该节点,同时还要存储curNode的next节点。

public ListNode* ReverseList(ListNode* head){
    ListNode* pre = nullptr;
    ListNode* cur = head;
    while(cur != nullptr){
        ListNode* next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }
    return prev;
}

4. 递归法:时间复杂度O(n), 空间复杂度O(n)

ListNode* ReverseList(ListNode* head){
    if(head==nullptr ||head->next == nullptr){
        return head;
    }
    ListNode* node = ReverseList(head->next);
    head->next->next = head;
    head->next = nullptr;
    return node;
}
Table of Contents