【每日一题】移除链表元素(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;
}
相关推荐
散峰而望1 小时前
C++入门(一)(算法竞赛)
c语言·开发语言·c++·编辑器·github
墨染点香2 小时前
LeetCode 刷题【138. 随机链表的复制】
算法·leetcode·链表
l1t3 小时前
利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
c语言·数据库·单元测试·lua·duckdb
GOATLong3 小时前
git使用
大数据·c语言·c++·git·elasticsearch
学习路上_write5 小时前
STM32回调函数使用/定时器/GPIO/串口/
c语言·单片机·嵌入式硬件
立志成为大牛的小牛5 小时前
数据结构——三十七、关键路径(王道408)
数据结构·笔记·程序人生·考研·算法
czy87874757 小时前
C语言实现状态模式
c语言·状态模式
czy87874757 小时前
C语言实现迭代器模式
c语言·迭代器模式
GilgameshJSS7 小时前
STM32H743-ARM例程36-DNS
c语言·arm开发·stm32·单片机·嵌入式硬件
Shinom1ya_8 小时前
算法 day 41
数据结构·算法·leetcode