[LeetCode] CM11 链表分割+OR36 链表的回文结构+160. 相交链表+141. 环形链表

👉👉👉👉LeetCode刷题训练营👈👈👈👈

在这里插入图片描述

欢迎订阅本专栏,说在前面💖

今天给大家带来leetcode相关专栏习题的讲解!

博主为了本系列专栏,做了很多准备,争取图文并茂,让大家看明白!希望大家不要吝啬订阅,与关注,多多评论哦!!💖💖💖💖💖💖💖

在这里插入图片描述

一、前言

💪💪💪💪那么这里博主先安利一下其他一些干货满满的专栏啦!💪💪💪💪

玩转Linux操作系统+系统编程+网络编程,快速掌握数据结构宝藏文章,点击下方蓝字即可跳转:
🔝🔝🔝🔝🔝玩转Linux操作系统+系统编程+网络编程🔝🔝🔝🔝🔝

CCF相关真题,点击下方蓝字即可跳转:
🔝🔝🔝🔝🔝 CCF真题🔝🔝🔝🔝🔝

纵横数据结构与算法,点击下方蓝字跳转:
🔝🔝🔝🔝🔝数据结构与算法🔝🔝🔝🔝🔝

二 、正文

CM11 链表分割

链表分割

在这里插入图片描述

#include <cstddef>
#include <cstdlib>
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {

        struct ListNode* lesshead=(struct ListNode*)malloc(sizeof( struct ListNode));
         struct ListNode* greaterhead=(struct ListNode*)malloc(sizeof( struct ListNode));

         struct ListNode* lesstail = lesshead;
         struct ListNode* greatertail = greaterhead;

         lesstail->next =NULL;
         greatertail ->next = NULL;

         struct ListNode* cur = pHead;

         while(cur)
         {
            if(cur->val < x)
            {
                lesstail->next = cur;
                lesstail = lesstail->next;

                cur=cur->next;
            }
            else{

                greatertail->next =cur;
                greatertail=greatertail->next;

                cur =cur->next;
            }

         }

            //链接
            lesstail->next = greaterhead->next;

            greatertail->next = NULL;

            return lesshead->next;
        // write code here
    }
};

OR36 链表的回文结构

链表的回文结构
在这里插入图片描述

class PalindromeList {
public:


    struct ListNode* midnode(ListNode* A)
    {
        struct ListNode* head = A;
        struct ListNode* fast = A;
        struct ListNode* slow = A;

        while(fast && fast->next )
        {
            fast=fast->next->next;
            slow= slow->next;
        }
        
        return slow;
    }

    struct ListNode* reverse_list(ListNode* A)//之前博客有讲
    {
        struct ListNode* prev = NULL;
        struct ListNode* cur =A;
        struct ListNode* back =A->next;

        while(cur)
        {
            cur->next = prev;

            //迭代

            prev = cur;
            cur=back;
            if(back)
            back=back->next;
        }

        return prev;

    }
    bool chkPalindrome(ListNode* A) {

        struct ListNode* mid = NULL;
        struct ListNode* rhead = NULL;
        struct ListNode* head = A;
        mid =midnode(A);
        rhead = reverse_list(mid);

        while(rhead && head)
        {
            if(head->val != rhead ->val)
            {
                return false;
            }
            
            head= head->next;
            rhead = rhead->next;
        }

        return true;
        // write code here
    }
};

160. 相交链表

相交链表
在这里插入图片描述
在这里插入图片描述

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {

    struct ListNode* curA = headA;
    struct ListNode* curB = headB;

    int lenA =0;
    int lenB =0;
    while(curA)
    {
        curA = curA->next;
        lenA++;
    }

    while(curB)
    {
        curB = curB->next;
        lenB++;
    }

    if(curA != curB)//如果结尾都不相同,那一定没有交点
    {
        return NULL;
    }

    int gap= abs(lenA - lenB);

    struct ListNode* longlist = NULL;
    struct ListNode* shortlist = NULL;

     if(lenA >= lenB)
     {
         longlist = headA;
         shortlist = headB;
     }
     else
     {
         longlist = headB;
         shortlist = headA;

     }
    while(gap--)
    {       
        longlist =longlist ->next;
    }

    while(longlist && shortlist)
    {
        if(longlist == shortlist)
        {
            return longlist;
        }
        else{
            
            longlist=longlist->next;
            shortlist=shortlist->next;
        }
    }
    return NULL;
           
}

141. 环形链表

环形链表
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

bool hasCycle(struct ListNode *head) {
    struct ListNode* fast =head;
    struct ListNode* slow = head;

    while(fast && fast ->next)
    {
        slow=slow->next;
        fast=fast->next->next;

        if(slow == fast)
        {
            return true;
        }
    }
    return false;
    
}

三、 结尾💖

🌹🌹🌹🌹🌹🌹🌹 感谢大家的点赞关注,希望大家多多评论!!!🌹🌹🌹🌹🌹🌹🌹

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要验链表是否为回文链表,可以采用以下方法: 1. 使用快慢指针找到链表的中点。 2. 将链表的后半部分反转。 3. 将链表的前半部分与反转后的后半部分进行逐一比较,如果存在不相等的节点,则该链表不是回文链表。 4. 如果链表的所有节点都比较完毕,且没有找到不相等的节点,则该链表是回文链表。 具体操作步骤如下: 1. 初始化快慢指针,快指针每次移动两个节点,慢指针每次移动一个节点,直到快指针到达链表末尾。此时慢指针指向链表的中点。 2. 将链表的后半部分反转。可以使用一个新的指针从慢指针位置开始反转,每次将当前节点的next指针指向前一个节点,然后将指针向后移动一个节点,直到到达链表末尾。最后将反转后的链表的头节点保存下来。 3. 分别使用两个指针,一个指向链表的头节点,另一个指向反转后的链表的头节点。逐一比较两个指针指向的节点的值是否相等,如果存在不相等的节点,则该链表不是回文链表。 4. 如果链表的所有节点都比较完毕,且没有找到不相等的节点,则该链表是回文链表。 通过以上方法,我们可以检验链表是否为回文链表。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++数据结构与算法之判断一个链表是否为回文结构的方法](https://download.csdn.net/download/weixin_38737980/14866827)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [判断链表是否为回文链表leetcode-LeetCodeAlgorithm:算法问题](https://download.csdn.net/download/weixin_38660295/19945543)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [判断链表是否为回文链表leetcode-LeetCode:力码](https://download.csdn.net/download/weixin_38600696/19945643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AF帆_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值