博客主页:2023Fighting的博客主页
欢迎关注点赞收藏⭐️留言
本文由2023Fighting原创,CSDN首发!
首发时间:2023年10月30日
参考在线编程网站:牛客网力扣
博主的码云gitee,平常博主写的程序代码都在里面。
文章仅供参考,如果发现错误,请及时告知我哦!感谢感谢!
题目链接:203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点。
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
创建一个带哨兵位的空链表,将不等于 val的节点尾插到新链表中去。
时间复杂度:O(N),空间复杂度:O(1)。
这里使用两个指针,一个用来遍历链表记为 cur,一个用来记录新链表的尾,记为 ptail。
算法流程如下:
struct ListNode* removeElements(struct ListNode* head, int val)
{
//创建哨兵位的头节点
struct ListNode* phead = (struct ListNode*)malloc(sizeof(struct ListNode));
//记录新链表的尾节点
struct ListNode* tail = phead;
//遍历链表删除节点
struct ListNode* cur = head;
while (cur)
{
if (cur->val == val)
{
struct ListNode* next = cur->next;
free(cur);
cur = next;
}
else
{
tail->next = cur;
tail = tail->next;
cur = cur->next;
}
}
tail->next = NULL;
//释放头节点
struct ListNode* del = phead;
phead = phead->next;
free(del);
return phead;
}
至此,本片文章就结束了,若本篇内容对您有所帮助,请三连点赞,关注,收藏支持下。
创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !!!