问题描述

Remove all elements from a linked list of integers that have value val.

Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5

问题分析

保留一个指针记录上一个节点,然后判断当前节点是不是需要去掉,若需要则将上一个节点的next指向这一个节点的next即可。

代码

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
    	if(head==0) return head;
        ListNode* p = head;
        ListNode* q = 0;
        while(p) {
        	if(p->val == val) {
        		if(p==head) {
		        	head = p->next;
		        }
	        	if(q!=0) {
	        		q->next = p->next;
	        	}
	        } else {
        		q=p;	
        	}
        	p=p->next;
        }
        return head;
    }
};