题目描述:
首刷自解:
ListNode* reverseList(ListNode* head) {
ListNode* dummyHead = new ListNode(-1, head);
ListNode* reserved = new ListNode(-1, nullptr);
ListNode* ptr1 , * ptr2, *ptr3 = reserved->next;
while (dummyHead->next != nullptr)
{
ptr2 = dummyHead;
ptr1 = dummyHead->next;
while (ptr1->next != nullptr)
{
ptr1 = ptr1->next;
ptr2 = ptr2->next;
}
ptr3 = ptr1;
ptr2->next = nullptr;
ptr3 = ptr3->next;
}
return reserved->next;
}
改进看解:
ListNode* revised_reverseList(ListNode* head)
{
ListNode* prev, *cur,*next;
prev = nullptr;
cur = head;
while (cur != nullptr)
{
next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
进阶看解: 递归
ListNode* advanced_reverseList(ListNode* head)
{
if (head == nullptr || head->next == nullptr) return head;
ListNode* newHead = advanced_reverseList(head->next);
head->next->next = head;
head->next = nullptr;
return newHead;
}
};