当前位置: 首页 > article >正文

链表OJ--下

文章目录

  • 前言
  • 一、链表分割
  • 二、环形链表I
  • 三、环形链表II
  • 四、链表的回文结构
  • 五、随机链表的复制


前言

一、链表分割

牛客网CM11:链表分割- - -点击此处传送
在这里插入图片描述
题解:
思路图:
在这里插入图片描述
代码:
在这里插入图片描述

二、环形链表I

力扣141:环形链表- - -点击此处传送
在这里插入图片描述
思路图:
在这里插入图片描述
扩展问题:
在这里插入图片描述

代码:

bool hasCycle(struct ListNode *head) {
    struct ListNode*fast=head,*slow=head;
    while(fast && fast->next)
    {
    	//slow走一步
        slow=slow->next;
        //fast走两步
        fast=fast->next->next;
        //若相等(相遇)则有环,返回true并退出程序
        if(fast==slow)
        {
            return true;
        }
    }
    //否则无环
    return false;
}

三、环形链表II

力扣142:环形链表II- - -点击此处传送
在这里插入图片描述
题解:
思路图:
在这里插入图片描述
代码:

struct ListNode *detectCycle(struct ListNode *head) {
    struct ListNode*fast=head;
    struct ListNode*slow=head;
    while(fast && fast->next)
    {
        slow=slow->next;
        fast=fast->next->next;
        if(fast==slow)
        {
            struct ListNode*meet=slow;
            while(head != meet)
            {
                head=head->next;
                meet=meet->next;
            }
            return meet;
        }
    }
    return NULL;
}

四、链表的回文结构

牛客网OR36:链表的回文结构- - -点击此处传送
在这里插入图片描述
思路图:
在这里插入图片描述

代码:

struct ListNode*reverseList(struct ListNode*head)
    {
        struct ListNode*cur=head;
        struct ListNode*newhead=NULL;
        while(cur)
        {
            struct ListNode*next=cur->next;
            cur->next=newhead;
            newhead=cur;
            cur=next;
        }
        return newhead;
    }
    struct ListNode*middleNode(struct ListNode*head)
    {
        struct ListNode*slow=head;
        struct ListNode*fast=head;
        while(fast && fast->next)
        {
            slow=slow->next;
            fast=fast->next->next;
        }
        return slow;
    }
    bool chkPalindrome(ListNode* head) {
        struct ListNode*mid=middleNode(head);
        struct ListNode*rhead=reverseList(mid);
        while(head && rhead)
        {
            if(head->val != rhead->val)
                return false;
            head=head->next;
            rhead=rhead->next;
        }
        return true;
    }

五、随机链表的复制

力扣138:随机链表的复制- - -点击此处传送
在这里插入图片描述
思路图:
在这里插入图片描述
代码:

struct Node* copyRandomList(struct Node* head) 
{
	struct Node*cur=head;
    while(cur)
    {
        struct Node*copy=(struct Node*)malloc(sizeof(struct Node));
        copy->val=cur->val;

        copy->next=cur->next;
        cur->next=copy;

        cur=copy->next;
    } 
    cur=head;
    while(cur)
    {
        struct Node*copy=cur->next;
        if(cur->random==NULL)
        {
             copy->random=NULL;
        }
           
        else
        {
            copy->random=cur->random->next;
        }
            
        cur=copy->next;
    }
    cur=head;
    struct Node*newhead=NULL;
    struct Node*tail=NULL;
    while(cur)
    {
        struct Node*copy=cur->next;
        struct Node*next=copy->next;
        if(tail==NULL)
        {
            newhead=tail=copy;
        }
        else
        {
            tail->next=copy;
            tail=tail->next;
        }
        cur->next=next;
        cur=next;
    }
    return newhead;
}

http://www.kler.cn/a/148220.html

相关文章:

  • Git在版本控制中的应用
  • 深度学习和图像处理
  • Java算法OJ(7)随机快速排序
  • 免费,WPS Office教育考试专用版
  • Fastapi使用MongoDB作为数据库
  • 万字长文解读深度学习——ViT、ViLT、DiT
  • 31.0/LinkedList/Set/ashSet/ TreeSet/Map/ HashMap/ TreeMap
  • rtsp点播异常出现‘circluar_buffer_size‘ option was set but it is xx
  • c语言练习12周(15~16)
  • 408—电子笔记分享
  • IEEE Fellow 2024名单揭晓:哪些半导体专家值得关注
  • 力扣二叉树--第三十四天
  • 你真的懂人工智能吗?AI真的只是能陪你聊天而已吗?
  • MySQL的Redo Log跟Binlog
  • C#,《小白学程序》第二十七课:大数四则运算之“运算符重载”的算法及源程序
  • 智慧城市交通大屏|助力解决城市交通问题
  • HarmonyOS 位置服务开发指南
  • 福州大学《嵌入式系统综合设计》 实验八:FFMPEG视频编码
  • C++: String类接口学习
  • FFmpeg 使用
  • Flask Web开发实验一:第一个Flask项目与Flask的工作方式
  • 2021年12月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 用苹果签名免费获取Xcode
  • [Spring] 字节一面~Spring 如何解决循环依赖问题 以及 @resource 与 @autowire 同时存在时谁生效
  • ES8语法async与await
  • xxljob学习笔记01(小滴课堂)