题目:
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
结果:
解题思路:
这题和剑指 Offer 18. 删除链表的节点很想,但是不同点是节点可能有重复值,所以这题要先从第二个节点开始循环判断后删除,最后再判断头节点。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
if(!head) return head;
struct ListNode *p = head;
while(p->next)
{
if(p->next->val == val)
{
struct ListNode *temp = p->next;
p->next = temp->next;
free(temp);
}
else
p = p->next;
}
if(head->val == val)
{
p = head;
head = head->next;
free(p);
}
return head;
}