链表——删除节点
leetcode题目:203,删除值为val的节点
-
难点:删除节点cur:
prev -> next = cur -> next
但是第一个节点没有前一个节点,所以head指向的节点的删除为:
head = cur -> next
所以按照链表head需要首先判断删除的节点是否为头节点,再分情况进行处理
-
解决办法:使用虚拟头节点,即:
vHead = new ListNode(0, head)
将vHead作为第一个节点的前节点
-
带虚拟头节点的链表节点删除
从上面可以看出删除普通节点 和头节点的操作均为:
prev->next = prev->next->next;
最后返回值为:
return vHead->next;
-
完整程序
class Solution { public: ListNode* removeElements(ListNode* head, int val) { if(head == NUL