牛客网:OR36 链表的回文结构

编程入门 行业动态 更新时间:2024-10-23 19:23:39

牛客网:OR36 链表的<a href=https://www.elefans.com/category/jswz/34/1769494.html style=回文结构"/>

牛客网:OR36 链表的回文结构

一、题目

 

函数原型:

bool chkPalindrome(ListNode* A)

二、思路

判断一个单链表是否为回文结构,由于单链表不能倒序遍历,所以需要找到单链表的后半段,并将其逆置,再与前半段链表进行比较。

如何找到单链表的后半段呢?

如果链表结点数为偶数个,只要找到单链表的第二个中间结点即可。

如果链表节点数为奇数个,只要找到单链表中间结点的下一个结点即可。

 本题相关题目:

206. 反转链表 - 力扣(LeetCode)

876. 链表的中间结点 - 力扣(LeetCode)

相关题解:

leetcode:206. 反转链表-CSDN博客

leetcode:876. 链表的中间结点-CSDN博客

 三、代码

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
#include <cstddef>
ListNode* reserve(ListNode *pphead)//逆置链表函数
{  if(pphead==NULL||pphead->next==NULL)return pphead;else{ListNode *prev =NULL;ListNode *cur=pphead;ListNode *next=pphead->next;while(cur){cur->next=prev;prev=cur;cur=next;if(next)next=next->next;elsenext=NULL;}return prev;}   
}class PalindromeList {
public:bool chkPalindrome(ListNode* A) {// write code hereListNode *fast=A;ListNode *slow=A;while(fast)//找链表的第二个中间结点或链表中间结点的下一个结点{slow=slow->next;if(fast->next)fast=fast->next->next;elsefast=NULL;}//逆置链表// ListNode *B=NULL;// ListNode *tailB=NULL;// while(slow)// {//     if(tailB==NULL)//     {//         B=tailB=slow;//     }//     else//     {//         tailB->next=slow;//         tailB=slow;//     }//     slow=slow->next;          // }// tailB->next=NULL;ListNode *B=reserve(slow);//逆置链表ListNode *curA=A;ListNode *curB=B;while(curA&&curB)//比较前半段和后半段链表{if(curA->val==curB->val){curA=curA->next;curB=curB->next;}elsereturn false; }return true;}
};

更多推荐

牛客网:OR36 链表的回文结构

本文发布于:2023-11-14 14:30:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1587819.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:回文   链表   结构   牛客网

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!