知识点
链表删除操作中,可以使用原链表来直接进行删除操作,也可以设置一个虚拟头节点在进行删除操作
我个人认为 虚拟头节点虽然增加了空间,但理解上比较方便,同时在处理删除头节点问题时也可以统一操作。
题目
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
code
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
//设置虚拟头节点,统一操作
ListNode* dummynode =new ListNode(0);
dummynode->next =head;//让虚拟头节点指向头节点
ListNode* curnode =dummynode;
while(curnode->next!=NULL){
if(curnode->next->val ==val){
ListNode* temnode =curnode->next;
curnode->next =temnode->next;
delete temnode;
}else{
curnode =curnode->next;
}
}
head =dummynode->next;
delete dummynode;
return head;
}
};