移除链表元素

代码随想录中的一道基础算法题,这里记录下
  • 设置一个虚拟头结点在进行删除操作

通过设置虚拟头节点,原链表的所有节点就都可以按照统一的方式进行移除了。

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点
        dummyHead->next = head; // 将虚拟头结点指向head,这样方面后面做删除操作
        ListNode* cur = dummyHead;
        while (cur->next != NULL) {
            if(cur->next->val == val) {
                ListNode* tmp = cur->next;
                cur->next = cur->next->next;
                delete tmp;
            } else {
                cur = cur->next;
            }
        }
        head = dummyHead->next;  
        delete dummyHead;
        return head;
    }
};

代码

  head = dummyHead->next;  这里要注意,删除操作可能会导致原始链表的头结点被删除。为了确保返回的链表头结点是有效的,我们在循环结束后,将head指针更新为dummyHead->next。这是因为dummyHead->next指向的是删除操作后的链表的新头结点。
posted @ 2023-05-30 16:55  borderlands  阅读(7)  评论(0)    收藏  举报