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

题目描述:

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

力扣:移除链表元素 (C语言)_第1张图片

 

一、解题思路

(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是否被删除不影响
}

你可能感兴趣的:(c语言,leetcode,数据结构,算法,链表)