【每日一题】移除链表元素(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;
}
相关推荐
_dindong2 小时前
基础算法:滑动窗口
数据结构·学习·算法·leetcode·力扣
Voyager_43 小时前
图像处理踩坑:浮点数误差导致的缩放尺寸异常与解决办法
数据结构·图像处理·人工智能·python·算法
老侯(Old monkey)3 小时前
C语言:冒泡法排序
c语言·函数调用·指针·冒泡法排序
信奥卷王6 小时前
[GESP202503 五级] 原根判断
java·数据结构·算法
迎風吹頭髮7 小时前
UNIX下C语言编程与实践58-UNIX TCP 连接处理:accept 函数与新套接字创建
c语言·网络·unix
haoly198910 小时前
数据结构和算法篇-线性查找优化-移至开头策略
数据结构·算法·移至开头策略
迎風吹頭髮11 小时前
UNIX下C语言编程与实践53-UNIX 共享内存控制:shmctl 函数与共享内存管理
服务器·c语言·unix
逆小舟14 小时前
【C/C++】指针
c语言·c++·笔记·学习
earthzhang202114 小时前
【1007】计算(a+b)×c的值
c语言·开发语言·数据结构·算法·青少年编程
迎風吹頭髮14 小时前
UNIX下C语言编程与实践63-UNIX 并发 Socket 编程:非阻塞套接字与轮询模型
java·c语言·unix