【LeetCode】203. 移除链表元素

leetcode链接 203. 移除链表元素

c 复制代码
#include <stdio.h>
#include <stdlib.h>

struct ListNode {
	int val;
	struct ListNode* next;
};
typedef struct ListNode ListNode;

ListNode* RemoveElements1(ListNode* head, int val) {
	ListNode* cur = head;
	ListNode* prev = NULL;
	ListNode* next = NULL;
	while (cur) {
		next = cur->next; // 下一个节点
		if (cur->val == val) {
			free(cur); // 1.删除
			cur = NULL;
			if (prev) { // 2.链接下一个节点
				prev->next = next;
			}
			else { // 没有前一个节点,说明删除的是头节点
				head = next;
			}
		}
		else {
			prev = cur; // 前一个节点
		}
		cur = next;
	}
	return head;
}

ListNode* RemomveElements2(ListNode* head, int val) {
	if (head != NULL) {
		ListNode* newhead = (ListNode*)malloc(sizeof(ListNode)); // 哨兵位
		newhead->val = 0; newhead->next = head; // malloc可能开辟失败,所以有警告NULL Pointer
		ListNode* tail = newhead;

		ListNode* cur = head;
		while (cur != NULL) {
			if (cur->val != val) { // 向新链表newhead尾插
				tail->next = cur;
				tail = tail->next;
				cur = cur->next;
			}
			else { // 删除
				ListNode* next = cur->next;
				free(cur);
				cur = next;
			}
		}
		// 前面newhead malloc可能开辟失败,所以有警告NULL Pointer
		tail->next = NULL; 
		// 不free oj也能过,但是内存泄漏。
		ListNode* tmp = newhead;
		newhead = newhead->next;
		free(tmp);
		return newhead;
	}
	return head;
}
相关推荐
zl_vslam1 分钟前
SLAM中的非线性优-3D图优化之相对位姿Between Factor-四元数(十二)
人工智能·算法·计算机视觉
coding者在努力9 分钟前
算法竞赛中根据数据规模猜测算法
c++·算法·stl·时间复杂度
jing-ya12 分钟前
day 59 图论part10
java·开发语言·数据结构·算法·图论
C羊驼20 分钟前
C语言学习笔记(十一):数据在内存中的存储
c语言·经验分享·笔记·学习
阿Y加油吧23 分钟前
力扣打卡——搜索二维矩阵、相交链表
线性代数·leetcode·矩阵
普贤莲花27 分钟前
【2026年第11周---写于20260322】
程序人生·算法·leetcode
小白自救计划30 分钟前
力扣知识点杂集
算法·leetcode·哈希算法
阿贵---33 分钟前
分布式系统C++实现
开发语言·c++·算法
不染尘.34 分钟前
最短路径之Bellman-Ford算法
开发语言·数据结构·c++·算法·图论
big_rabbit050237 分钟前
JVM堆内存查看命令
java·linux·算法