描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list/
求解
class Solution {
public:
// 方法一,迭代
ListNode *reverseList_1e(ListNode *head) {
if (!head) {
return nullptr;
}
ListNode *left = nullptr;
ListNode *mid = head;
ListNode *right = head->next;
ListNode *res = head;
while (mid) {
mid->next = left;
res = mid;
left = mid;
mid = right;
right = right == nullptr ? nullptr : right->next;
}
return res;
}
// 方法一代码优化
ListNode *reverseList_1epro(ListNode *head) {
ListNode *pre = nullptr;
ListNode *cur = head;
while (cur) {
auto next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
return pre;
}
// 方法二,递归
ListNode *reverseList(ListNode *head) {
if (!head || !head->next) {
return head;
}
auto newNode = reverseList(head->next);
head->next->next = head;
head->next = nullptr;
return newNode;
}
};