文章目录
- ⭐️27.移除链表元素⭐️
- 🔐题目描述
- 💡解题思路
- 🔑代码
本题的题解代码是用C语言编写的。
📒博客主页:2023Fighting的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由2023Fighting原创,CSDN首发!
📆首发时间:🌴2023年10月30日🌴
💬参考在线编程网站:🌐牛客网🌐力扣
博主的码云gitee,平常博主写的程序代码都在里面。
🙏文章仅供参考,如果发现错误,请及时告知我哦!感谢感谢!
题目链接:203. 移除链表元素
⭐️27.移除链表元素⭐️
🔐题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点。
示例 1:
输入: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。
算法流程如下:
- 判断 cur的 val是否等于 val。
如果等于,保存 cur的 next,删除当前节点 cur,cur = next,迭代着往后遍历;如果不相等,将 cur尾插到新链表中,ptail->next = cur,跟新链表的尾,ptail = ptail->next,cur = cur->next,迭代着往后遍历,直到遍历完整个链表。
图解如下:
🔑代码
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;
}
至此,本片文章就结束了,若本篇内容对您有所帮助,请三连点赞,关注,收藏支持下。
创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !!!