【数据结构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;
}
相关推荐
Frank_zhou1 小时前
算法-链表实战【删除链表的倒数第 N 个结点】中等
数据结构
不过四级不改名6777 小时前
用c语言实现简易c语言扫雷游戏
c语言·算法·游戏
weixin_419658317 小时前
数据结构之二叉树
java·数据结构
我命由我123458 小时前
嵌入式 STM32 开发问题:烧录 STM32CubeMX 创建的 Keil 程序没有反应
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·嵌入式
C++ 老炮儿的技术栈8 小时前
手动实现strcpy
c语言·开发语言·c++·算法·visual studio
xtmatao9 小时前
正整数的正向分解
c语言
心.c9 小时前
JavaScript 数据结构详解
前端·javascript·数据结构
哎写bug的程序员9 小时前
leetcode复盘(1)
算法·leetcode·职场和发展
Frank_zhou9 小时前
数据结构与算法入门(上)
数据结构
-qOVOp-10 小时前
408第一季 - 数据结构 - B树与B+树
数据结构·b树