本题主要是在于头节点的删除和中间节点删除不一样需要考虑到,因为我们还需要返回这个链表的头节点。
1.假设头节点就是目标节点,所以头节点需要特殊处理。
2.假设头节点后面连续几个都是目标节点,那么需要去进行加一个while循环处理。
3.在链表的题目里需要注意,需要先判断节点是否为空才能访问节点。
4.c++中需要对删除的节点手动释放。
5.虚拟头节点可以把两种情况变为一种情况,因为可以方便记录头节点的位置。
6.无虚拟头结点
不设虚拟头结点的话,就要区分删除中间节点和头部节点的方式
while(head!=nullptr&&head->val==val)
{
ListNode* temp=head;
head=head->next;
delete temp;
}
ListNode* cur=head;
while(cur!=nullptr&&cur->next!=nullptr)
{
if(cur->next->val==val)
{
ListNode* temp=cur->next;
cur->next=cur->next->next;
delete temp;
}
else
{
cur=cur->next;
}
}
return head;
7.虚拟头节点版
ListNode* dummy=new ListNode(0);
dummy->next=head;
ListNode* cur=dummy;
while(cur!=nullptr&cur->next!=nullptr)
{
if(cur->next->val==val)
{
ListNode* temp=cur->next;
cur->next=cur->next->next;
delete temp;
}
else{
cur=cur->next;
}
}
head=dummy->next;
delete dummy;
return head;