leetcode 203 移除链表元素

51 阅读1分钟
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
    
        while(head && head->val == val) {
            ListNode* tmp = head;
            head = head->next;
            // 释放内存
            delete tmp;
        }
        // 与反转链表类似,提前初始化curr、prev、next
        ListNode* curr = head;
        ListNode* prev = nullptr;
        ListNode* next = nullptr;
        while(curr) {
            if(curr->val == val) {
                next = curr->next;
                prev->next = next;
                delete curr;
                // 注意和反转链表区别,这里prev不需要后移
                curr = next;
            }
            else {
                prev = curr;
                curr = curr->next;
            }
        }
        return head;
    }
};