力扣:移除链表元素 (C语言)

这篇博客主要介绍了如何删除链表中所有值等于给定整数的节点。首先判断链表是否为空,如果为空则直接返回NULL。接着,创建一个新头节点H,H的next指向原头节点head。通过两个指针p和s遍历链表,当找到值等于val的节点时,将其删除。最后返回H->next作为新的头节点。代码实现中使用了迭代方式处理节点删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

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

 

一、解题思路

(1)需要先判断一下链表的情况:

         1.链表是否为空,为空直接返回NULL。

         2.需要删链表的头节点,则head->next。 

         3.正常删除链表中的节点。

(2)为此的解决方法

1是我们在最前方加一个if的判断语句就可以,防止程序出问题

2是我们需要删除头节点的话那我们新建一个头节点H,让H->next=head,这样的话如果删除了head,也不影响链表。

3我学数据结构学的不行,我就直接用了两个指针,判断值val与一个指针的next->val,这样的话,我可以删除这个节点,我不会判断指针的val然后删除的。

二、代码

代码如下(示例):

struct ListNode* removeElements(struct ListNode* head, int val){
      if(head==NULL) return NULL;//先判断是不是空链表
      struct ListNode*H;
      H=(struct ListNode*)malloc(sizeof(struct ListNode));
      H->next=head;//新建头节点
      struct ListNode*p=H;
      struct ListNode*s=NULL;//建立两个指针,p指向我的头指针,s指针先是NULL,删除节点用。
      while(p->next!=NULL)
      {
          if(p->next->val==val)
          {
              s=p->next;
              p->next=p->next->next;//只会这种删除方式,希望大佬会的能跟我讲讲(讲明白点,我笨呜呜呜)
              free(s);
          }
          else
          {
              p=p->next;
          }
      }
      return H->next;//head是否被删除不影响
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值