题目描述:
首刷自解:
ListNode* removeElements(ListNode* head, int val) {
ListNode* header = new ListNode(-1, head);
ListNode* ptr1 = header->next, * ptr2 = header, * temp = nullptr;
while (ptr1 != nullptr)
{
if (ptr1->val == val)
{
temp = ptr1;
ptr1 = ptr1->next;
ptr2->next = ptr1;
delete(temp);
}
else
{
ptr2 = ptr1;
ptr1 = ptr1->next;
} ListNode* revised_removeElements(ListNode* head, int val) {
ListNode* Dummyheader = new ListNode(-1, head);
ListNode* ptr = Dummyheader;
while (ptr->next!=nullptr)
{
if (ptr->next->val == val)
ptr->next = ptr->next->next;
else
ptr = ptr->next;
}
return Dummyheader->next;
}
}
return header->next;
}
改进看解:
ListNode* revised_removeElements(ListNode* head, int val) {
ListNode* Dummyheader = new ListNode(-1, head);
ListNode* ptr = Dummyheader;
while (ptr->next!=nullptr)
{
if (ptr->next->val == val)
ptr->next = ptr->next->next;
else
ptr = ptr->next;
}
return Dummyheader->next;
}
进阶看解: 递归
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;
}