【数据结构】移除链表元素-图文解析(单链表OJ题)

这篇具有很好参考价值的文章主要介绍了【数据结构】移除链表元素-图文解析(单链表OJ题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【数据结构】移除链表元素-图文解析(单链表OJ题),数据结构,数据结构,链表,c语言

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

本文导航

💭做题思路

🎨画图更好理解:

✍️代码实现

🗂️分情况讨论:

❄️极端情况:


💭做题思路

遍历链表,找到值为 val 的节点删除

这里需要两个指针

 cur 用来遍历链表

 prev 指向 cur 的前一个位置,方便删除一个节点后,链接前后节点

如果遇到要删除的节点,就让 prev->next = cur->next 

注:不要忘了 free 删除掉的节点

🎨画图更好理解:

【数据结构】移除链表元素-图文解析(单链表OJ题),数据结构,数据结构,链表,c语言


✍️代码实现

🗂️分情况讨论:

1. 当 cur->val == val 时,删除该节点

        (1)头删要单独处理,因为头删会改变 head 的指向,本题要求返回新的头节点

        (2)剩下的正常处理

2. 当 cur->val != val 时,让 prev  cur 指向下一个节点

最后,当 cur == NULL 时,说明此链表已经全部遍历完毕,结束循环遍历。

struct ListNode* removeElements(struct ListNode* head, int val)
{
    struct ListNode* prev = NULL;
    struct ListNode* cur = head;
    //当cur == NULL时结束循环
    while (cur != NULL)
    {
        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. 空链表

【数据结构】移除链表元素-图文解析(单链表OJ题),数据结构,数据结构,链表,c语言

2. 要删除全部节点

【数据结构】移除链表元素-图文解析(单链表OJ题),数据结构,数据结构,链表,c语言

🤔我们的代码是否能应对这两种情况呢?

如果是空链表:

【数据结构】移除链表元素-图文解析(单链表OJ题),数据结构,数据结构,链表,c语言

他给我们空链表,我们返回空指针,没毛病

如果要删除全部节点:

【数据结构】移除链表元素-图文解析(单链表OJ题),数据结构,数据结构,链表,c语言

最后返回的也是空指针

由此可见我们的代码还是比较完美的,最后提交代码:

【数据结构】移除链表元素-图文解析(单链表OJ题),数据结构,数据结构,链表,c语言文章来源地址https://www.toymoban.com/news/detail-626277.html

到了这里,关于【数据结构】移除链表元素-图文解析(单链表OJ题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 移除链表元素详解

    移除链表元素详解

      原题出处: . - 力扣(LeetCode) 我们可以新创建一个链表,然后将不等于val的节点拿下来进行尾插,这样的方式更加简易,只需要遍历整个链表即可。 我们首先使用一个指针cur来遍历原链表,来获取不等于val的节点。 如果cur的next等于val就跳过这个节点,如果不等于val就尾

    2024年04月26日
    浏览(7)
  • 算法刷题-链表-移除链表元素

    算法刷题-链表-移除链表元素

    链表操作中,可以使用原链表来直接进行删除操作,也可以设置一个虚拟头结点再进行删除操作,接下来看一看哪种方式更方便。 力扣题目链接 题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2: 输入:head = [],

    2024年02月08日
    浏览(8)
  • Java移除链表元素

    Java移除链表元素

    目录 1.题目描述 2.题解 题解1 题解2 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足  Node.val == val  的节点,并返回  新的头节点  。 示例 输入:head = [1,2,6,3,4,5,6],val = 6 输出:[1,2,3,4,5] 输入:head = [], val = 1 输出:[] 输入:head = [7,7,7,7], val = 7 输出:

    2024年02月07日
    浏览(10)
  • 移除链表元素 , 设计链表 ,反转链表

    leetcode 删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2: 输入:head = [], val = 1 输出:[] 示例 3: 输入:head = [7,7,7,7], val = 7 输出:[] 移除元素  主要是  找到要移除的前一个  , 之后才能移除 。采用虚拟头节点的方法

    2024年02月08日
    浏览(10)
  • 链表OJ题目1 (移除链表元素)

    链表OJ题目1 (移除链表元素)

    力扣(链接放这里喽)  先贴代码再做讲解:     我们应该先将情况考虑周全,画图分析思路 : 我们假设有上述这种情况,按照题目设想,前面三个6都应该free掉,从3这个位置开始,也就是说我们要返回的头就从此处开始,所以我们先考虑值相等,过掉再继续。 在这个位

    2024年02月12日
    浏览(9)
  • leetcode203. 移除链表元素

    leetcode203. 移除链表元素

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【LeetCode】 🍓希望我们一起努力、成长,共同进步。 题目链接 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的

    2024年02月06日
    浏览(11)
  • Leetcode: 203. 移除链表元素

    Leetcode: 203. 移除链表元素

    题目 给你一个链表的头节点  head  和一个整数  val  ,请你删除链表中所有满足  Node.val == val  的节点,并返回  新的头节点  。 难度: 简单 题目链接:203. 移除链表元素 示例 1: 示例 2: 示例 3: 方法一:  题目解析: 遍历链表,删除指定元素(val) 代码展示 删除元素的

    2024年02月04日
    浏览(58)
  • 【LeetCode】203. 移除链表元素

    【LeetCode】203. 移除链表元素

    leetcode链接 203. 移除链表元素

    2024年01月18日
    浏览(9)
  • LEEDCODE 203移除链表元素

    LEEDCODE 203移除链表元素

    2024年02月06日
    浏览(7)
  • LeetCode 203.移除链表元素

    力扣题目链接

    2024年01月16日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包