作者: 华丞臧.
专栏:【数据结构】
各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞+收藏+关注
)。如果有错误的地方,欢迎在评论区指出。
推荐一款刷题网站 👉 LeetCode刷题网站
题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
解题思路
思路:
双指针法,给出两个指针变量 ptr
和 cur
,ptr
用来指向新的链表的尾部,cur
用来找等于val
的节点。如果cur
指向的节点等于val
,则释放cur
指向的节点;如果cur
指向的节点不等于val
,则把cur
指向的节点链接到新的链表的尾部。
代码实现
struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode* cur = head;
struct ListNode* ptr = NULL;
struct ListNode* tmp = NULL;
if(head == NULL)
{
return head;
}
while(cur)
{
if(cur->val == val && head == cur)
{
tmp = head->next;
free(head);
head = tmp;
cur = tmp;
}
else if(cur->val == val)
{
tmp = cur->next;
free(cur);
ptr->next = tmp;
cur = tmp;
}
else
{
ptr = cur;
cur = cur->next;
}
}
return head;
}