当前位置: 首页 > news >正文

今日写题04work

题目:移除链表元素

两种实现思路

思路一

使用双指针,prev,cur快慢指针解决。当cur不等于val,两个指针跳过。当等于val时,要考虑两种情况,一种是pos删,一种是头删除。

pos删除就是正常情况,但头删是一种特殊情况,比如第一个数据就是等于val。所以,我们在这里分类处理。

struct ListNode* removeElements(struct ListNode* head, int val) {
    struct ListNode* cur=head,*prev=NULL;
    while(cur)
    {
        if(cur->val!=val)
        {
            prev=cur;
            cur=cur->next;
        }
        else
        {
            if(prev==NULL)
            {
                head=cur->next;
                free(cur);
                cur=head;
            }
            else
            {
                prev->next=cur->next;
                free(cur);
                cur=prev->next;
            }
        }
    }
    return head;
}

思路二

尾插到新链表,如果不等于val,尾插到新链表。如果等于val,那就头删。末尾记得把tail的next置空,否则如果最后一个数据要删除的话,那tail的next就成了野指针。还有两种特殊情况,空链表和全等于val。

空链表

tail等于空指针,如果末尾在使用就是空指针引用。

全等于val

这时全部头删,没有一个结点尾插。那tail还是空指针,末尾使用就是空指针引用。

这两种情况都是空指针引用错误。所以,我们可以在末尾加一个if语句,判断tail是否为空。

如果为空,就不执行。如果不为空,那就执行。

最后记得return的是新的头指针,newHead。

​
struct ListNode* removeElements(struct ListNode* head, int val) {
    struct ListNode* newHead=NULL,*tail=NULL;
    struct ListNode* cur=head;
    while(cur)
    {
        if(cur->val != val)
        {
            if(tail==NULL)
            {
                newHead=tail=cur;
            }
            else
            {
                tail->next=cur;
                tail=cur;
            }
            cur=cur->next;
        }
        else
        {
            struct ListNode* next=cur->next;
            free(cur);
            cur=next;
        }
    }
    if(tail)
    {
        tail->next=NULL;
    }
    return newHead;
}

​

题目链接:203. 移除链表元素 - 力扣(LeetCode)

相关文章:

  • 为何STL里stack queue没有迭代器
  • .NET版Word处理控件Aspose.Words教程:使用 C# 删除 Word 中的空白页
  • AI 编程工具—Cursor 进阶篇 数据分析
  • 【java】深拷贝和浅拷贝的区别
  • ISO9001质量管理体系 | 设计和开发控制程序
  • LeetCode字符串相关算法题(1)【C语言版】
  • PyQt6/PySide6 线程间通信(Signal/Slot)
  • Hasleo Backup Suite v5.0.2.3 多语种便携版:全能型数据守护神器详解
  • DockerFile优化镜像体积
  • 吸烟(抽烟)检测和识别1:吸烟(抽烟)数据集说明(含下载链接)
  • Java基础知识总结(四十八)--TCP传输、TCP客户端、TCP服务端
  • 蓝桥杯---颜色分类(leetcode第75题)题解
  • 非谓语动词三驾马车
  • .NET 9.0 的 Blazor Web App 项目,Bootstrap Blazor 全局异常 <ErrorLogger> 使用备忘
  • 【计算机网络】传输层数据段格式
  • webassembly009 transformers.js 网页端侧推理 whisper-web
  • NSCoding 与归档解档
  • wordpress资讯类网站整站打包
  • AcWing——3722. 骑车路线
  • Linux:ASoC 声卡驱动框架简介
  • 庆祝上海总工会成立100周年暨市模范集体劳动模范和先进工作者表彰大会举行,陈吉宁寄予这些期待
  • 招商蛇口:今年前4个月销售额约498.34亿元
  • 马克思主义理论研究教学名师系列访谈|曾瑞明:想通了才可能认准,认准了才能做好
  • 【社论】三个“靠谱”为市场注入确定性
  • 奥迪4S店内揭车衣时遭“连环车损”,双方因赔偿分歧陷僵局
  • 巴基斯坦外交部:印度侵略行径侵犯巴主权