力扣203:移除链表元素

力扣203:移除链表元素

题目描述:

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == 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

输出:[]

提示:

列表中的节点数目在范围 [0, 104] 内

1 <= Node.val <= 50

0 <= val <= 50

分析:

移除链表中和val值相同的元素

定义两个指针,当前指针cur,和当前指针之前的指针pre

当前指针cur指向头节点,当前指针的前驱pre指向NULL

遍历链表:

  • 当链表中当前元素ur->val!=val时,可以继续往下遍历,pre=curcur=cur->next
  • 当链表中当前元素ur->val=val时,就需要删除当前指针所指的节点,即通过pre来完成,让pre的指针域指向当前节点cur的下一个节点,pre->next=cur->next。如果当pre为空时,就类似于头删。

代码:

c 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeElements(struct ListNode* head, int val) {
    struct ListNode*cur=head;
    struct ListNode*pre=NULL;
    while(cur)
    {
        if(cur->val!=val)
        {
            pre=cur;
            cur=cur->next;
        }
        else
        {
            if(pre==NULL)
            {
                head=cur->next;
                free(cur);
                cur=head;
            }
            else
            {
                pre->next=cur->next;
                cur=cur->next;
            }
        }
    
    }
    return head;
}
相关推荐
IronMurphy5 小时前
【算法四十三】279. 完全平方数
算法
墨染天姬5 小时前
【AI】Hermes的GEPA算法
人工智能·算法
mount_myj5 小时前
长长久久【C语言】
c语言
papership5 小时前
【入门级-数据结构-3、特殊树:完全二叉树的数组表示法】
数据结构·算法·链表
smj2302_796826525 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
山甫aa6 小时前
差分数组 ----- 从零开始的数据结构
数据结构
酿情师6 小时前
yihan:一款面向连续网页学习的智能侧边栏插件
学习·学习方法·工具·学习工具
早日退休!!!6 小时前
《数据结构选型指南》笔记
数据结构·数据库·oracle
Beginner x_u6 小时前
链表专题:JS 实现原理与高频算法题总结
javascript·算法·链表
丑八怪大丑6 小时前
Java数据结构与集合源码
数据结构