题目:删除链表中等于给定值val
的所有节点。
分析:
先判断链表的头节点是否为要删除的节点,若是,将head指针向后移;若不是,无需操作。
指针pre当前访问节点的前一个节点(pre指向的节点的值一定不为val)。
判断当前访问节点的值是否为val:若是,将pre->next指向当前访问节点的下一个节点若不是,将pre向后移动一个节点。
代码:
class Solution {
public:
/**
* @param head a ListNode
* @param val an integer
* @return a ListNode
*/
ListNode *removeElements(ListNode *head, int val) {
// Write your code here
if(!head)
return NULL;
head->next=removeElements(head->next,val);
return head->val == val ? head->next : head;
}
};
非递归:
class Solution {
public:
/**
* @param head a ListNode
* @param val an integer
* @return a ListNode
*/
ListNode *removeElements(ListNode *head, int val) {
// Write your code here
ListNode *newhead=new ListNode(-1);
ListNode *pre=newhead;
newhead->next=head;
while(pre->next){
if(pre->next->val==val) {
ListNode *t=pre->next;
pre->next=t->next;
t->next=NULL;
}
else{
pre=pre->next;
}
}
return newhead->next;
}
};