项目场景:
提示:这里简述项目相关背景:
链表练习题
问题描述:
提示:这里描述项目中遇到的问题:
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
原因分析:
提示:这里填写问题的分析:
虚拟节点(双指针):
增设一个虚拟结点,开始时prev指向虚拟结点,cur指向头结点,当cur不为空时,若cur的值等于val,修改两个指针指向链接关系prev->next=cur->next;,并移向下一个结点cur=cur->next;,若不相等,则两个指针同时向下移动,node->next即为所求链表的头指针。
解决方案:
提示:这里填写该问题的具体解决方案:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode* Node=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* prev=Node;
struct ListNode* cur=head;
Node->next=head;
if(head==NULL)return head;
while(cur!=NULL)
{
if(cur->val==val)
{
prev->next=cur->next;
cur=cur->next;
}
else
{
prev=cur;
cur=cur->next;
}
}
head=Node->next;
free(Node);
return head;
}