日期:2017-7-10
思路:使用两个指针,首先注意head是否为val值,注意判断指针是否为NULL的顺序和连续几个val值出现的情况
*/
#include <iostream> #include <stack> using namespace std; template <typename T> class ListNode{ public: T val; ListNode<T>* next; ListNode<T>(const T& val, ListNode<T>* next = NULL) { this->val = val; this->next = next; } }; template <typename T> ListNode<T>* removeElements(ListNode<T>* head, int val) { while (head->val == val && head != NULL) { head = head->next; } ListNode<int>* p = head; ListNode<int>* q = NULL; while (p != NULL) { q = p; q = q->next; while (q != NULL && q->val == val) { q = q->next; } p->next = q; p = p->next; } return head; }