题目:
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
1,设置一个头节点,统一操作。
2,这里是用p查找,但是对比是 用p的下一个节点的value值进行对比。当找到时设置一个临时节点q记录。
思考:是否可以用p指针查找value,设置一个pre????
对于链表的增删查改,设置一个头节点是最方便的,因为在不设置虚拟头节点时,对第一个结点操作时,要分情况讨论,而设置了之后对所有的结点的处理都是一样的操作。我觉得设置虚拟头节点和链表得尾指针为空挺像,因为对于尾结点得操作,它的next指向NULL,相当于一个空结点,所以对尾指针操作时不需要特别处理。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* Lnode = new ListNode(0);//开一个头节点
Lnode->next = head;
ListNode *p;
p = Lnode;
while(p->next!=NULL){
if(p->next->val==val){
ListNode*q;
q=p->next;
p->next = q->next;
delete q;
}else{
p=p->next;
}
}
head = Lnode->next;
delete Lnode;
return head ;
}
};