题目描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
https://leetcode.cn/problems/fan-zhuan-lian-biao-lcof/
题解
链表问题,画图,多定几个点,搞清楚逻辑和边界处理。
递归
递归要注意根据子问题的结果处理当前问题,还有对最小子问题的回答。
1 2 3 4 5 6 7 8 9 10
| class Solution { public: ListNode* reverseList(ListNode* head) { if (!head || !head->next) return head; ListNode* newHead = reverseList(head->next); head->next->next = head; head->next = nullptr; return newHead; } };
|
时间复杂度 O(n),空间复杂度 O(n)
迭代
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* prev = nullptr; ListNode* cur = head; while (cur) { ListNode* next = cur->next; cur->next = prev; prev = cur; cur = next; } return prev; } };
|
时间复杂度 O(n),空间复杂度 O(1)