ListNode* removeElements(ListNode* head, int val) { if (head == NULL) return head; ListNode *p = head; while (p && p->val==val) { p = p->next; } if (p) { ListNode *q=p; ListNode *temp = p->next; while (temp) { if (temp->val != val) { q->next = temp; q=q->next; } else { q->next = temp->next; } temp = temp->next; } } return p; }