力扣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;
}
相关推荐
pianmian134 分钟前
python数据结构基础(7)
数据结构·算法
Nu11PointerException35 分钟前
JAVA笔记 | ResponseBodyEmitter等异步流式接口快速学习
笔记·学习
闲晨36 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
好奇龙猫3 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20243 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
ChoSeitaku4 小时前
链表交集相关算法题|AB链表公共元素生成链表C|AB链表交集存放于A|连续子序列|相交链表求交点位置(C)
数据结构·考研·链表
偷心编程4 小时前
双向链表专题
数据结构
香菜大丸4 小时前
链表的归并排序
数据结构·算法·链表
jrrz08284 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time4 小时前
golang学习2
算法