BM13-判断一个链表是否为回文结构

给定一个链表,请判断该链表是否为回文结构。
回文是指该字符串正序逆序完全一致。
数据范围: 链表节点数 0≤n≤10^5
链表中每个节点的值满足 ∣val∣≤10^7

# 示例1
输入:{1}
返回值:true

# 示例2
输入:{2,1}
返回值:false
说明:2->1  
    
# 示例3
输入: {1,2,2,1}
返回值:true
说明:1->2->2->1  
 /* struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */

/**
 * 
 * @param head ListNode类 the head
 * @return bool布尔型
 */

bool isPail(struct ListNode* head ) {
    // write code here  
    struct ListNode* pfast; //快指针
    struct ListNode* pslow;//慢指针
    struct ListNode* pnex;//后面一个指针
    pfast = head;
    pslow = head;
    pnex = NULL;
    if(head==NULL || head->next==NULL)
    {
        return true;
    }
    while(pfast!=NULL && pfast->next!=NULL)
    {
        pfast = pfast->next->next;
        pslow = pslow->next;
    }
    pfast = pslow->next;
    pslow->next=NULL;
    while(pfast!=NULL)
    {
        pnex = pfast->next;
        pfast->next = pslow;
        pslow = pfast;
        pfast = pnex;
    }
    pfast = head;
    while(pslow!=NULL && pfast!=NULL)
    {
        if(pslow->val!=pfast->val)
        {
            return false;
        }
        pfast = pfast->next;
        pslow = pslow->next;
    }
    return true;
    //只要循环n/2次
//     for(int i=0;i<(n/2);i++)
//     {
//         j = 0;
//         while(j<(n-i-1))
//         {
//             p2 = p2->next;
//             j++;
//         }
//         if(p1->val == p2->val)
//         {
//             p1 = p1->next;
//             p2 = head;
//         }
//         else
//         {
//             return false;
//         }
//     }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容