LeetCode刷题:27.移除链表元素

文章目录

  • ⭐️27.移除链表元素⭐️
    • 题目描述
    • 解题思路
    • 代码

本题的题解代码是用C语言编写的。

博客主页:2023Fighting的博客主页
欢迎关注点赞收藏⭐️留言
本文由2023Fighting原创,CSDN首发!
首发时间:2023年10月30日
参考在线编程网站:牛客网力扣
博主的码云gitee,平常博主写的程序代码都在里面。
文章仅供参考,如果发现错误,请及时告知我哦!感谢感谢!

题目链接:203. 移除链表元素

⭐️27.移除链表元素⭐️

题目描述

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点

示例 1:
LeetCode刷题:27.移除链表元素_第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。
算法流程如下:

  1. 判断 cur的 val是否等于 val。
    如果等于,保存 cur的 next,删除当前节点 cur,cur = next,迭代着往后遍历;如果不相等,将 cur尾插到新链表中,ptail->next = cur,跟新链表的尾,ptail = ptail->next,cur = cur->next,迭代着往后遍历,直到遍历完整个链表。

图解如下:
LeetCode刷题:27.移除链表元素_第2张图片

代码

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;
}

至此,本片文章就结束了,若本篇内容对您有所帮助,请三连点赞,关注,收藏支持下。
创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !!!
在这里插入图片描述

你可能感兴趣的:(LeetCode,leetcode,链表,算法,c语言)