C:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode *p;
if(head == NULL) // 对开始结点进行判断
return NULL;
while(head != NULL && head->val == val)
head = head->next; // head 指向第一个不同值的结点
if(head == NULL) // 如果第一个不同值的结点是空则返回空
return NULL;
p = head;
while(p->next != NULL)
{
if(p->next->val == val) // 剔除后面非值的结点
p->next = p->next->next;
else // 后移
p = p->next;
}
return head;
}