移除链表元素

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

☃️个人主页:fighting小泽
🌸作者简介:目前正在学习C语言和数据结构
🌼博客专栏:leetcode练习题
🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻

一.链表必会题 - - 力扣203移除链表元素

题目链接:移除链表元素

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

移除链表元素

1.普通方法

首先我们能想到的就是遍历一遍链表,将不等于val的节点通过尾插的方式连接起来,将等于val的结点释放掉

测试代码:


struct ListNode* removeElements(struct ListNode* head, int val){
      struct ListNode* fast=head;
      struct ListNode* slow=NULL;

      while(fast)
      {
          if(fast->val == val)
          {              
               slow->next=fast->next;
               free(fast);
               fast=slow->next;  
          }
          else
          {
              slow=fast;
              fast=fast->next;
          }
      }
    return head;
}

但是仅仅这样是行不通的,当val在头节点的位置时,我们这样是无法释放头节点的。所以我们要判断头节点是不是等于val,若等于,我们就将头节点指向它的下一个结点,并释放掉当前节点。要是节点元素一直等于val,我们就将头节点一直向后挪,直到指向NULL。

正确代码如下:

struct ListNode* removeElements(struct ListNode* head, int val){
      struct ListNode* fast=head;
      struct ListNode* slow=NULL;

      while(fast)
      {
          if(fast->val == val)
          {
              if(slow)
              {
                  slow->next=fast->next;
                  free(fast);
                  fast=slow->next;
              }
              else
              { 在这里判断头节点,释放并挪动头节点的位置
                fast=fast->next;
                free(head);
                head=fast;
              }
          }
          else
          {
              slow=fast;
              fast=fast->next;
          }
      }
    return head;
}

移除链表元素

2.带哨兵位的链表

所谓带哨兵位的链表,就是一个附加的链表的节点,该节点作为第一个节点,它的值域并不存储任何东西,只是为了操作的方便引用的。

有了哨兵位作为链表的头节点,我们就不需要不断改变头节点的位置了,只需要将节点值不等于val的节点不断尾插到哨兵位后面就可以了,听着是不是非常简单呢。

代码如下:

struct ListNode* removeElements(struct ListNode* head, int val){
      struct ListNode* cur=head;
      struct ListNode* rhead=(struct ListNode*)malloc(sizeof(struct ListNode));
      struct ListNode* p=rhead;
      while(cur!=NULL)
      {
          if(cur->val != val)
          {
              p->next=cur;
              p=p->next;
          }
         cur=cur->next;
      }
      p->next=NULL;
      return rhead->next;
}

移除链表元素

注意:哨兵位的下一个节点才是我们的头节点,并且要将最后一个节点的指针置空,它指向的可能是我们刚刚释放掉的空间

结尾

结尾

这些就是我给大家分享的关于移除链表元素的知识啦,希望我们都能有所收获
先赞后看,养成习惯!!^ _ ^
码字不易,大家的支持就是我坚持下去的动力,点赞后不要忘了关注我哦!

如有错误,还请您批评改正(。ì _ í。)文章来源地址https://www.toymoban.com/news/detail-440133.html

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

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

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

相关文章

  • 移除链表元素 , 设计链表 ,反转链表

    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日
    浏览(32)
  • 链表OJ题目1 (移除链表元素)

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

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

    给你一个链表的头节点  head  和一个整数  val  ,请你删除链表中所有满足  Node.val == val  的节点,并返回  新的头节点  。   (1)直接使用原来的链表来进行移除节点操作: (2)设置一个虚拟头结点在进行移除节点操作:

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

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

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

    leetcode链接 203. 移除链表元素

    2024年01月18日
    浏览(31)
  • LeetCode 203.移除链表元素

    力扣题目链接

    2024年01月16日
    浏览(42)
  • leetcode203. 移除链表元素

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

    2024年02月06日
    浏览(33)
  • LEEDCODE 203移除链表元素

    2024年02月06日
    浏览(33)
  • 算法-设计链表、移除链表元素、反转链表

    伪装成一个老手! 设计一个单链表,其中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 实现 MyLinkedList 类: MyLinkedList()初始化 MyLinkedList 对象。 int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1

    2024年02月11日
    浏览(83)
  • 【链表OJ 1】移除链表元素val

            大家好,欢迎来到我的博客,此题是关于链表oj的第一题,此后还会陆续更新博客,如有错误,欢迎大家指正。 来源:https://leetcode.cn/problems/remove-linked-list-elements/description/ 分析:         使用两个指针 prev 和 cur 来遍历链表。 prev 指针指向当前节点的前一个节点

    2024年02月14日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包