链表回文结构

发布时间:2024年01月20日

链表回文结构

编写一个函数,检查输入的链表是否是回文的。

示例 1:

输入: 1->2
输出: false 

示例 2:

输入: 1->2->2->1
输出: true 

?链表的回文结构,应该先找到中间节点,然后进行一次反转。

然后对其值进行比较。

struct ListNode* reverseList(struct ListNode* head){
       struct ListNode*newHead=NULL;
       struct ListNode*cur=head;
       while(cur){
         struct ListNode*next=cur->next;
         cur->next=newHead;
         newHead=cur;
         cur=next;  
       }
       return newHead;
}
struct ListNode* middleNode(struct ListNode* head) {
    struct ListNode* fast=head,*slow=head;
    while(fast&&fast->next){
        slow=slow->next;
        fast=fast->next->next;
    }
    return slow;
}
bool isPalindrome(struct ListNode* head){
    struct ListNode*mid=middleNode(head);
    struct ListNode*rHead=reverseList(mid);
    struct ListNode*curA=head;
    struct ListNode*curR=rHead;
    while(curA&&curR){
        if(curA->val!=curR->val){
            return false;
        }
        else{
            curA=curA->next;
            curR=curR->next;
        }
    }
    return true;
}

文章来源:https://blog.csdn.net/2301_77479435/article/details/135711585
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。