【每日一题】移除链表元素(C语言)

移除链表元素,链接奉上

目录

思路:

正常 情况:

下我们移除链表元素时,需要该位置的前结点与后节点

特别 情况时:

例如

我们发现,需要改变头结点,否则因为返回的head因为指向的位置被free,会导致程序错误

代码实现:

c 复制代码
struct ListNode* removeElements(struct ListNode* head, int val) 
{
    struct ListNode* prev = NULL;
    struct ListNode* cur = head;
    while(cur)
    //当cur为NULL时自动结束
    {
        if(cur->val == val)
        //分别判断cur->val的情况
        {
            struct ListNode* next = cur->next;
            free(cur);
            if(!prev)
            {
             //当prev为NULL时改变head
                head = next;
            }
            else
            {
                prev->next = next;
            }
            cur = next;

        }
        else
        {
            prev = cur;
            cur = cur->next;
        }
    }
    return head;
}

链表题目小技巧:

我们调试时可以在VS或其他的软件进行调试,也不用专门搞一个链表:

可以创建一个如下的main函数,根据题目要求进行调试

c 复制代码
int main()
{
	struct ListNode* n1 = (ListNode*)malloc(sizeof(ListNode));
	struct ListNode* n2 = (ListNode*)malloc(sizeof(ListNode));
	struct ListNode* n3 = (ListNode*)malloc(sizeof(ListNode));
	struct ListNode* n4 = (ListNode*)malloc(sizeof(ListNode));
	struct ListNode* n5 = (ListNode*)malloc(sizeof(ListNode));
	if (!(n1 && n2 && n3 && n4 && n5))
	{
		perror("malloc");
		return -1;
	}
	n1->next = n2;
	n2->next = n3;
	n3->next = n4;
	n4->next = n5;
	n5->next = NULL;

	n1->val = 1;
	n2->val = 2;
	n3->val = 3;
	n4->val = 4;
	n5->val = 5;
	
	return 0;
}
相关推荐
yuannl101 小时前
图的深度优先遍历DFS
数据结构
无相求码2 小时前
C程序的内存到底怎么分的?栈、堆、全局区一张图讲清楚
c语言
天空'之城2 小时前
C 语言工业级通用组件手写 08:精准软件消抖
c语言·嵌入式开发·工业级组件·软件消抖·按键防抖
Legendary_0084 小时前
LDR6500 设计指南:Type-C 音频快充二合一配件 PD 取电与插拔时序控制方案
c语言·开发语言·音视频
青山木4 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
不会就选b4 小时前
算法日常・每日刷题--<归并排序>1
数据结构·算法
危桥带雨5 小时前
排序算法(快排、归并、计数、基数排序)
数据结构·算法·排序算法
会飞的小新5 小时前
C 标准库之 <fenv.h> 详解与深度解析
c语言·开发语言·microsoft
zephyr055 小时前
数据结构-并查集
数据结构
稚南城才子,乌衣巷风流6 小时前
动态树(Dynamic Tree)数据结构详解
数据结构·算法