删除链表中等于给定值 val 的所有节点。
示例:
输入: | 1->2->6->3->4->5->6, val = 6 |
---|---|
输出: | 1->2->3->4->5 |
这个问题大多数情况我们都可以考虑到,但是有的情况不容易想到,例如:
1—>NULL, val = 1 |
---|
当删除1后,链表为空,所以我们需要在链表的头结点之前建立一个pRoot,来返回
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode*pRoot=new ListNode(0);//在链表前面建立一个节点
pRoot->next=head;
if(val==NULL)
{
return head;
}
ListNode*prev=pRoot;
ListNode*cur=head;
while(cur)
{
if(cur->val!=val)//当cur的值不为val,cur和prev继续往下走
{
prev=prev->next;
cur=cur->next;
}
else
{
prev->next=cur->next;//prev的next指向cur的next
cur=prev->next;//cur还等于prev的next
}
}
return pRoot->next;//返回pRoot的next也就是链表的头结点
}
};