【数据结构OJ题】移除链表元素

原题链接:https://leetcode.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. 代码实现

cpp 复制代码
/**
 * 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;
}
相关推荐
敲敲敲-敲代码3 分钟前
游戏设计:推箱子【easyx图形界面/c语言】
c语言·开发语言·游戏
simple_ssn25 分钟前
【C语言刷力扣】1502.判断能否形成等差数列
c语言·算法·leetcode
Curry_Math38 分钟前
LeetCode 热题100之技巧关卡
算法·leetcode
ahadee1 小时前
蓝桥杯每日真题 - 第10天
c语言·vscode·算法·蓝桥杯
好想有猫猫1 小时前
【51单片机】LCD1602液晶显示屏
c语言·单片机·嵌入式硬件·51单片机·1024程序员节
军训猫猫头1 小时前
35.矩阵格式的一到一百数字 C语言
c语言·算法
Mr_Xuhhh2 小时前
递归搜索与回溯算法
c语言·开发语言·c++·算法·github
爱吃生蚝的于勒4 小时前
C语言内存函数
c语言·开发语言·数据结构·c++·学习·算法
失落的香蕉7 小时前
C语言串讲-2之指针和结构体
java·c语言·开发语言
ChoSeitaku10 小时前
链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
c语言·算法·链表