『 LeetCode题解 』203. 移除链表元素

题目链接 : 『 LeetCode题解 』203. 移除链表元素
https://leetcode.cn/problems/remove-linked-list-elements/


目录


🌟题目要求


🌟解题思路(动图解析)

🧐方案一

方案1:主要思路遇到val就删除,分为头删和中间删除两种情况。

当val在链表中间时,遇到val就删除链表中和val相同的节点,并链接val后面的节点。

当val在链表开头时,或者连续的时候,我们将链表其实的head(头)向后移动,直到找到不是val的节点,作为开始的头。


😁方案二

方案2:遍历原链表,把不是val的节点,尾插到新链表

使用尾插的方法,将不是val的值插入到新链表,为了避免增加时间复杂度,使用tail为尾节点

但需要注意的是当末尾不是val值时需要将tail->next置为NULL


🌟代码示列

方案一 代码:

c 复制代码
struct ListNode* removeElements(struct ListNode* head, int val)
{
        struct ListNode*prev=NULL;
        struct ListNode*cur=head;
        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;
}

方案二 代码:

c 复制代码
struct ListNode* removeElements(struct ListNode* head, int val)
{
	struct ListNode*cur=head;
    struct ListNode*newhead=NULL;
    struct ListNode*tail=NULL;
    while(cur)
    {
        if(cur->val==val)
        {
            struct ListNode* del=cur;        
            cur=cur->next;  
            free(del);
        }
        else
        {
            if(tail == NULL)
            {
                newhead = tail = cur;
            }
            else
            {
                tail->next=cur;
                tail=tail->next;
            }
            cur=cur->next;
            
        }
    }    
        if(tail)
            tail->next=NULL;     
       
     return newhead;
}

相关推荐
QiLinkOS几秒前
极客精神与商业思维的融合实践(3)
c语言·c++·人工智能·算法·开源协议
bIo7lyA8v2 分钟前
算法设计中的代价函数优化与约束求解的技术8
算法
暖阳华笺6 分钟前
【数据结构与算法】哈希专题
数据结构·c++·算法·leetcode·哈希算法
ceclar1236 分钟前
C#字节流与字符流
算法·c#·.net
LuminousCPP10 分钟前
数据结构 - 单链表第二篇:单链表进阶操作
c语言·数据结构·笔记·链表
大白话_NOI11 分钟前
【洛谷 P1024 】[NOIP2001 提高组] 一元三次方程求解 - 详细分析与C++实现
c++·算法
Matthew_zhu_12 分钟前
P3374 【模板】树状数组 1 题解
算法
随意起个昵称13 分钟前
区间dp-进阶题目1(进阶合并)
c++·算法·动态规划
伶俜6614 分钟前
鸿蒙原生应用实战(四)ArkUI 语音变声器:录音 + 4 种音效 + 音调变换算法
算法·华为·harmonyos
玖玥拾14 分钟前
C/C++ 数据结构(三)链表核心算法
c语言·数据结构·c++·链表