删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val)
{
//思路:定义pre,cur两个指针,cur用于遍历整个单链表,pre用于保存cur走一步之前的位置,以便删除节点时,进行前后的链接
//分两种情况:(1)删除的是首节点
//(2)删除的不是首节点
struct ListNode*cur=head;
struct ListNode*pre=cur;
//若链表为空,则无法删除,返回NULL
if(head==NULL)
{
return NULL;
}
//链表不为空时
while(cur)
{
//当前所指节点的元素等于val,则进行删除
if(cur->val==val)
{
//删除的是首节点,则要注意改变head的指向
if(cur==head)
{
cur=cur->next;
free(head);
head=cur;
}
//删除的不是首节点
else
{
pre->next=cur->next;
free(cur);
cur=pre->next;
}
}
//当前所指节点的元素不等于val,则指针继续移动
else
{
pre=cur;
cur=cur->next;
}
}
return head;
}