Remove all elements from a linked list of integers that have value val.
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
问题分析:题目所要表达意思就是删除与目标值相同的节点。解决此题不要固定思维真正去删除节点,因为这里提供的是单链表,而在链表中删除一个节点需要知道他的前驱,因此不太符合本题目的条件,一个解法就是找出不等于目标值的节点,然后把他们串接起来就可以了,不过要注意使用一个节点来单独保存第一个非目标值节点,另外遍历结束后需要设置最后一个节点的next指针为空。以下为实现代码:
/**
* 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) {
if(head==NULL) return NULL;
ListNode *p=head,*q=NULL,*m=NULL;
while(p){
if(p->val!=val){
if(m==NULL) {
q=p;
m=q;
p=p->next;
}
else{
q->next=p;
q=q->next;
p=p->next;
}
}
else{
p=p->next;
}
}
if(q) q->next=NULL;
return m;
}
};