【力扣】链表的回文结构

🖊作者 : Djx_hmbb
📘专栏 : 数据结构
😆今日分享 : 野马结局 :
答 :非洲有一种吸血蝙蝠,常叮在野马的腿上吸血,不管野马怎样暴怒、狂奔都没用,因此不少野马被活活折磨死。但动物学家发现,蝙蝠所吸的血量极少,远不足以使野马死去,野马的死因在于自身的暴怒和狂奔。于是人们把这种因小事而大动肝火,以致因别人的过失而伤害自己的现象,称之为“野马结局”。
请添加图片描述

✔题目链接

【力扣】链表的回文结构

✔题目

在这里插入图片描述

✔解题思路 :

请添加图片描述

  • 先找到中间节点,
  • 然后把后半部分逆置
  • 再将前后两部分一一比对,如果节点的值全部相同,则即为回文。

✔代码详情:

bool chkPalindrome(struct ListNode* A) {
    struct ListNode* slow = A;
    struct ListNode* fast = A;

   //找到中间位置
    while (fast != NULL && fast->next != NULL) {
        //后移
        slow = slow->next;
        fast = fast->next->next;
    }

    struct ListNode* next = slow->next;
    struct ListNode* nexttail = next->next;
    struct ListNode* prev = A;
    //另prev为slow的前一个指针
    while(prev->next != slow) {
        prev = prev->next;
    }
     prev->next = NULL;//将slow前面的指针置空

    //头插法--倒置slow至fast之间的指针
    slow->next = NULL;
    next->next = slow;
    //后移
    slow = next;
    next = nexttail;
    if (nexttail)
    nexttail = nexttail->next;
    
    while (next) {
        next->next = slow;
        //后移   
        slow = next;    
        next = nexttail;     
        if (nexttail)
            nexttail = nexttail->next;
    }
    
    //比较
    struct ListNode* cur = A;
    struct ListNode* curnew = slow;

    while (cur && curnew) {
        //比较是否一致
        if (cur->val != curnew->val) {
            return false;

        }
        else { 
            //后移
            cur = cur->next;
            curnew = curnew->next;
        }
    }
    return true;
}

✔总结:

  • 这题思维很重要!
  • 画图也很重要!
  • 思路一定要清晰!!!

感谢家人的阅读,若有不准确的地方 欢迎在评论区指正!

家人们,点个请添加图片描述再走呗~

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

D. Star.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值