【数据结构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;
}
相关推荐
大数据张老师1 小时前
数据结构——邻接矩阵
数据结构·算法
傻童:CPU4 小时前
C语言需要掌握的基础知识点之前缀和
java·c语言·算法
degen_4 小时前
第一次进入 PEICORE 流程
c语言·笔记
深思慎考4 小时前
从合并两个链表到 K 个链表:分治思想的递进与堆优化
数据结构·链表·递归··队列·合并链表
又见野草4 小时前
软件设计师知识点总结:数据结构与算法(超级详细)
数据结构·算法·排序算法
我是大咖4 小时前
C语言-贪吃蛇项目开发工具篇---ncursee库安装
c语言·开发语言
czy87874755 小时前
用C语言实现单例模式
c语言·单例模式
czy87874755 小时前
用C语言实现适配器模式
c语言·适配器模式
im_AMBER6 小时前
Leetcode 33
算法·leetcode·职场和发展
La Pulga6 小时前
【STM32】RTC实时时钟
c语言·stm32·单片机·嵌入式硬件·mcu·实时音视频