链表OJ题目1 (移除链表元素)

这篇具有很好参考价值的文章主要介绍了链表OJ题目1 (移除链表元素)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

力扣(链接放这里喽)

链表OJ题目1 (移除链表元素),数据结构,C语言,链表,数据结构

 先贴代码再做讲解:

struct ListNode* removeElements(struct ListNode* head, int val)
{

    struct ListNode* cur = head;
    struct ListNode* tail = NULL;
    while(cur)
    {

        if(cur->val == val)
        {
            if(cur == head)
            {
                head = head->next;
                free(cur);
                cur = head;
            }              
            else
            {
                tail->next = cur->next;
                free(cur);
                cur = tail->next;
            }
                
        }
        else
        {         
            tail = cur;
            cur = cur->next;         
        }

    }

    if(tail)
        tail->next = NULL;

    return head;
}

 链表OJ题目1 (移除链表元素),数据结构,C语言,链表,数据结构

 

我们应该先将情况考虑周全,画图分析思路 :

我们假设有上述这种情况,按照题目设想,前面三个6都应该free掉,从3这个位置开始,也就是说我们要返回的头就从此处开始,所以我们先考虑值相等,过掉再继续。

在这个位置,要有一个继续往后走的指针,和保存头部位置的指针,以及一个保存尾部的指针来连接后面的5,因为head确定后就不会再动了,而遍历指针过掉中间的6时,3与5是不相接的,要连接只能说找尾指针。

还有第二种思路,就是值不相等就拿下来,值相等就跳过,free掉:文章来源地址https://www.toymoban.com/news/detail-653780.html

struct ListNode* removeElements(struct ListNode* head, int val)
{

    struct ListNode* cur = head;
    struct ListNode* temp = NULL;
    struct ListNode* tail = NULL;
    while(cur)
    {
        if(cur->val == val)
        {
            temp = cur;
            cur = cur->next;
            free(temp);
        }          
        else    
        {
            if(tail == NULL)
                head = tail = cur;
            else   
            {
                 tail->next = cur;
                 tail = cur;
            }        
                      
            cur = cur->next;
        }
    }

    if(tail)
        tail->next = NULL;
    if(tail == NULL)
        return NULL;

    return head;
}

到了这里,关于链表OJ题目1 (移除链表元素)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 单链表相关经典算法OJ题:移除链表元素

    单链表相关经典算法OJ题:移除链表元素

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 题目:移除链表元素 解法一: 解法一的代码实现: 解法二: 解法二代码的实现: 总结 世上有两种耀眼的光芒,一种是正在升起的太阳,一种是正在努力学习编程的你!一个爱学编程的人。各

    2024年02月04日
    浏览(10)
  • 【LeetCode题目详解】 203. 移除链表元素707. 设计链表206. 反转链表 day3(补)

    【LeetCode题目详解】 203. 移除链表元素707. 设计链表206. 反转链表 day3(补)

    题意:删除链表中等于给定值 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 输出:[] 看到这道题就想到了链表 这道题有两种写法,涉及如下链表操作的两种方式: 直接使用

    2024年02月16日
    浏览(12)
  • 数据结构——图解链表OJ题目

    数据结构——图解链表OJ题目

            学完了单链表之后,我们对其基本结构已经有了一定的了解,接下来我们通过一些题目强化对链表的理解,同时学习一些面试笔试题目的新思路以及加强对数据结构单链表的掌握。  目录 题目一.876. 链表的中间结点 - 力扣(LeetCode) 题目二:21. 合并两个有序链表

    2024年02月04日
    浏览(11)
  • 数据结构c语言版:顺序表oj题练习(原地移除元素、合并两个有序数组)

    数据结构c语言版:顺序表oj题练习(原地移除元素、合并两个有序数组)

    在单数组里面历遍找val,如果是val,就删除。不是就跳过。 时间复杂度O(n^2),最坏情况每个都是val。相当于一个等差数列。 比如 下标0开始找,0不是,不动数组 下标1,1不是,不动数组 下标2,2是,删除元素,变成【0,1,2,3,0,4,2】 下标2,2是,删除元素,变成【0,

    2024年01月23日
    浏览(18)
  • 移除链表元素

    移除链表元素

    ☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:leetcode练习题 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪🏻 题目链接: 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你 删除链表中所有满足 Node.val == val 的节点 , 并返

    2024年02月04日
    浏览(18)
  • 移除链表元素详解

    移除链表元素详解

      原题出处: . - 力扣(LeetCode) 我们可以新创建一个链表,然后将不等于val的节点拿下来进行尾插,这样的方式更加简易,只需要遍历整个链表即可。 我们首先使用一个指针cur来遍历原链表,来获取不等于val的节点。 如果cur的next等于val就跳过这个节点,如果不等于val就尾

    2024年04月26日
    浏览(10)
  • 203.移除链表元素

    203.移除链表元素

    循环遍历整个链表 定义两个指针:prev,cur 如果cur是要删除的节点,prev-cur-next,然后free(cur) 但是注意每次都要新定义一个节点del,用来free,不影响原来的cur节点往下循环 更新cur和prev 但是需要注意如果删除的是头节点,就要特殊处理,画图带上指针,情况分析,一目了然。

    2024年01月22日
    浏览(16)
  • 算法刷题-链表-移除链表元素

    算法刷题-链表-移除链表元素

    链表操作中,可以使用原链表来直接进行删除操作,也可以设置一个虚拟头结点再进行删除操作,接下来看一看哪种方式更方便。 力扣题目链接 题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2: 输入:head = [],

    2024年02月08日
    浏览(12)
  • Java移除链表元素

    Java移除链表元素

    目录 1.题目描述 2.题解 题解1 题解2 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足  Node.val == val  的节点,并返回  新的头节点  。 示例 输入:head = [1,2,6,3,4,5,6],val = 6 输出:[1,2,3,4,5] 输入:head = [], val = 1 输出:[] 输入:head = [7,7,7,7], val = 7 输出:

    2024年02月07日
    浏览(13)
  • 移除链表元素 , 设计链表 ,反转链表

    leetcode 删除链表中等于给定值 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 输出:[] 移除元素  主要是  找到要移除的前一个  , 之后才能移除 。采用虚拟头节点的方法

    2024年02月08日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包