代码随想录中的一道基础算法题,这里记录下
- 设置一个虚拟头结点在进行删除操作
通过设置虚拟头节点,原链表的所有节点就都可以按照统一的方式进行移除了。
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,ListNode,cur,元素,next,链表,移除 From: https://www.cnblogs.com/batiannixuge/p/17443746.htmlhead
指针更新为dummyHead->next
。这是因为dummyHead->next
指向的是删除操作后的链表的新头结点。