题目:
203. 移除链表元素
给你一个链表的头节点 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 ;}
};