题目:删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
(来源:力扣LeetCode)
思路:乍一看,这个题目很简单,只需要从头开始遍历就可以了。实际上,这道题目给出的链表没有指向头的一个结点,要想删除第一个结点时会比较麻烦,所以需要建立一个指向头的虚拟结点。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode *H;
H=(struct ListNode*)malloc(sizeof(struct ListNode));
H->next=head;//建立一个指向头的结点,即哨兵结点
struct ListNode *p,*q;
p=H;
q=head;
while(q!=NULL)
{
if(q->val==val)
p->next=q->next;//经测试,执行free语句会导致错误,不知道为什么
else
p=q;
q=q->next;
}
return H->next;
}