首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【LeetCode每日一题】:移除链表元素

【LeetCode每日一题】:移除链表元素

作者头像
用户11915063
发布2025-11-20 09:54:28
发布2025-11-20 09:54:28
410
举报

题目链接:

203.移除链表元素-力扣(LeetCode)

题目描述:

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点

示例:

思路:

当头节点(新定义为prev)不为空时,进行遍历,此时再定义一个头尾节点(不在原链表基础上进行删改) 当头节点的val不是要删除的,直接进行尾插操作,如果判断链表为空(newHead==NULL),此时就让新头节点(newHaed)=新尾节点(NewTail)=prev,如果链表非空,prev的val直接尾插在尾节点的下一个节点,此时再让尾节点向后走一个节点即可,判断一个节点过后就可以让prev向后走一个节点再次进行上述判断,最后当prev为空,跳出循环,判断为尾节点不为空,就说明链表不为空,要将尾节点的下一个节点置为NULL,最后返回newHead即可

图解:

代码实现:

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) 
{
    ListNode*newHead,*newTail;
    newHead=newTail=NULL;
    ListNode*prev=head;
    while(prev)
    {
        //判断prev节点是否为val
        if(prev->val!=val)
        {
            //尾插
            if(newHead==NULL)
            {
                //链表为空
                newHead=newTail=prev;
            }
            else
            {
                //链表非空
                newTail->next=prev;
                newTail=newTail->next;
            }
        }
            prev=prev->next;
    }
    if(newTail)
        newTail->next=NULL;
    return newHead;

}

复杂度分析:

时间复杂度:O(N)


完整代码源:

【CPP知识学习仓库】 - Gitee.com

往期回顾:

【数据结构初阶】--双向链表(一)

【数据结构初阶】--双向链表(二)

总结:这道题运用到了数据结构——链表,相关链表的结构在之前数据结构初阶的学习中就已经给大家讲解过了,大家可以翻看之前的博客进行回顾总结,如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

最后送大家一句话来警醒自己:算法能力不是一蹴而就,而是通过一朝一夕的坚持刷题而积累的!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目链接:
  • 题目描述:
  • 示例:
  • 思路:
  • 图解:
  • 代码实现:
  • 复杂度分析:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档