现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。
给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。
测试样例:
{1,2,3,4,3,2,1},2
{1,3,4,3,1}
代码:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class
ClearValue {
public
:
ListNode* clear(ListNode* head,
int
val) {
// write code here
ListNode* lol=
new
ListNode(-
1
); //在head前加个叫lol的结点 lol也可称为伪头结点
lol->next=head;
ListNode* flag1=lol->next; //flag1从head开始 flag2从lol开始
ListNode* flag2=lol;
//以下是删除特定结点的遍历过程
while
(flag1!=NULL){
if
(flag1->val==val){
flag1=flag1->next;
flag2->next=flag1;
}
else
{
flag2=flag2->next;
flag1=flag1->next;
}
}
lol=lol->next; //整个过程完了 我再将lol变为lol后置结点
return
lol;
}
};
|