【数据结构OJ题】移除链表元素
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
原题链接https://.cn/problems/remove-linked-list-elements/description/
1. 题目描述
2. 思路分析
我们可以定义一个结构体指针变量cur让cur一开始指向头结点同时定义一个结构体指针prev令prev初始化为空指针NULL。
我们使用cur遍历链表如果当前结点的值和val相等我们再用if选择语句进行相应操作
1. 如果cur指向的结点是头结点我们就让头指针head走到下一个结点head=cur->next再free释放掉当前结点cur。再让cur指向此时的头结点cur=head。
2. 如果cur指向的结点不是头结点我们就让prev的next指向cur的next
prev->next=cur->next。再free释放掉当前结点cur。再让cur往后走一步
cur=prev->next。
如果当前结点的值和val不相等我们就用prev保存当前结点让cur往后遍历cur=cur->next.
3. 代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode *cur=head,*prev=NULL;
while(cur)
{
if(cur->val==val)
{
if(cur==head)
{
head=cur->next;
free(cur);
cur=head;
}
else
{
prev->next=cur->next;
free(cur);
cur=prev->next;
}
}
else
{
prev=cur;
cur=cur->next;
}
}
return head;
}