c语言--力扣简单题目(移除链表元素)讲解

题目如下;

给你一个链表的头节点 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 输出:[]

结构体定义:

复制代码
typedef struct Node {
char val;
struct Node* next;
}Node;

文章目录

第一部分

复制代码
List head, tail;
Node* p, * p1;//p1用来删除节点
p = (Node*)malloc(sizeof(struct Node));
p1 = (Node*)malloc(sizeof(struct Node));
int ch, val;
head = p;
tail = p;
head->next = NULL;
printf("请输入链表的内容");
while ((ch = getchar()) != '\n') {
    if (ch == ' ') {
        continue;
    }
    p = (Node*)malloc(sizeof(struct Node));
    p->val = ch-48;
    tail->next = p;
    tail = p;
    tail->next = NULL;
}

这部分主要是创建链表并且输入内容

第二部分

复制代码
tail = head;//让tail指向头节点
printf("请输入你要删除的值");
scanf("%d", &val);
while (tail->next != NULL) {
     if (tail->next->val == val) {
         if (tail->next->val == val && tail->next->next == NULL) {
             p1 = tail->next;
             free(p1);
             tail->next = NULL;
             break;
         }
         else {
             p1 = tail->next;
             tail->next = p1->next;
             free(p1);
         }
     }
    else
        tail = tail->next;
}
while (head->next != NULL) {
    head = head->next;
    if (head->val >= 0) {
        printf("%d ", head->val);
    }
    else
        break;
}
    return 0;

这部分我们进行查找并且进行删除操作,如果我们找到了我们要删除的值,还有进行判断,判断该节点是否为尾节点,如果是尾节点,那么我们就用p1指针释放尾节点的内存,并且让新的尾节点的next指向NULL并退出循环。

如果不是尾节点,那么依然用p1指针进行释放,并且让tail指向p1的next。

当这些操作完成之后,我们就可以进行打印,

在这里我们要注意一下,如果节点里的值为负数,那么可能就是我们指向到了分配内存空间以外的空间,这时我们就需要赶紧退出循环。

至此,代码结束。

相关推荐
sheeta19981 小时前
LeetCode 每日一题笔记 日期:2025.03.24 题目:2906.构造乘积矩阵
笔记·leetcode·矩阵
leiming62 小时前
CAN 通信协议学习讲义(带图文 + C 语言代码)
c语言·开发语言·学习
xht08323 小时前
PHP vs C语言:核心差异全解析
c语言·开发语言·php
计算机安禾4 小时前
【数据结构与算法】第3篇:C语言核心机制回顾(二):动态内存管理与typedef
c语言·开发语言·数据结构·c++·算法·链表·visual studio
C羊驼5 小时前
C语言学习笔记(十五):预处理
c语言·经验分享·笔记·学习·算法
是娇娇公主~6 小时前
C++ 多态机制与虚函数实现原理
c语言·c++
老鼠只爱大米7 小时前
LeetCode经典算法面试题 #295:数据流的中位数(双堆法、有序列表、平衡树等多种实现方案详解)
算法·leetcode·优先队列··数据流·中位数·java 面试题
x_xbx7 小时前
LeetCode:215. 数组中的第K个最大元素
数据结构·算法·leetcode
AI科技星8 小时前
基于wr/c + h/c = 1的螺旋线矢量特性及应用分析
c语言·开发语言·人工智能·opencv·算法·计算机视觉·r语言
进击的荆棘8 小时前
优选算法——分治
数据结构·算法·leetcode·分治