1、思路:

本人已经感觉到双指针的无敌了!!

  • 建立头节点phead和指向头节点的指针p,为了解决单链表找不到上一个结点的问题
  • 结束条件为head!=NULL,比较head和val的值,删除重复的元素 
  • p->next=head->next;head=head->next

2、图解

3、代码实现

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* removeElements(ListNode* head, int val) {
12         ListNode *phead,*p;
13         phead=new ListNode(0);
14         phead->next=head;
15         p=phead;
16         while(head!=NULL){
17             if(head->val!=val){
18                 head=head->next;
19                 p=p->next;
20             }
21             else{
22                  p->next=head->next;
23                  head=head->next;
24             }
25         }
26         return phead->next;
27     }
28 };