链表的回文结构

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
    bool chkPalindrome(ListNode* A) {
        ListNode *cur = A;
        ListNode *tmp = cur;
        ListNode *fast = A;
        ListNode *slow = A;
        ListNode *newHead=NULL;
        int count = 0;
        if(cur==NULL || cur->next==NULL)
            return true;
       while(fast&& fast->next!=NULL){
          
           fast=fast->next->next;
           slow=slow->next;
       }
        if(fast!=NULL && fast->next==NULL){
            count = 1;
        }
            
       cur=A;
        
       while(cur!=slow){
            tmp=cur;
           cur=cur->next;
            tmp->next =newHead;
           newHead=tmp;
           
        }
        if(count==1){
            slow = slow->next;
        }
        fast=newHead;
        while(slow!=NULL){
            if(fast->val==slow->val){
                fast=fast->next;
                slow=slow->next;
            }
            else{
                break;
            }         
        }
        if(slow==NULL)
            return true;
        return false;
      
    }
};
时间: 2024-08-22 17:24:43

链表的回文结构的相关文章

算法--链表的回文结构

转载请标明出处http://www.cnblogs.com/haozhengfei/p/abb04e825ba4b847dcb704605ea1cd36.html 链表的回文结构 链表回文结构练习 第9节 链表的回文结构练习题 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例: {1,2,3,2,1} 返回:true {1,2,3,2,3} 返回:false Java (javac 1.7) 代码自动补全 1 i

链表的基础题目学习(EPI)

链表的题目总体来说细节比较多,因为链表的题目在操作链表的过程中本身有些复杂,所以如果链表作为编程题出现的时候,多数情况下题目本身的思路可能不是很复杂,不要把题目往复杂的方向去思考就好了~这里的链表只是说单向链表,双向链表,跳表.树的链表表示形式不属于这个链表的范畴. 1.合并两个有序的链表.额外空间要求O(1). 思路很明确的一个题目,三个指针. 2.如何判断一个链表中是否存在环?如果存在环,如何快速的找出环的起点位置. 这个题目只要见过一次就很难再忘记它的解题方法了,非常有技巧的一个方法.fa

直通BAT算法精讲附程序源码

课程内容第1章 免费试看2 视频 | 2 练习字符串和二叉树问题免费试看1.1 二叉树打印 免费1.2 二叉树打印练习题 免费1.3 字符串 免费1.4 两串旋转练习题 免费 第2章 排序4 视频 | 16 练习详细介绍常见的排序算法过程,以及各个排序算法稳定性.时间和空间复杂度,当然还有常见面试题目的讲解.2.1 排序(1)2.2 冒泡排序练习题2.3 选择排序练习题2.4 插入排序练习题2.5 归并排序练习题2.6 快速排序练习题2.7 堆排序练习题 免费2.8 希尔排序练习题2.9 排序(

每日一题 为了工作 2020 0322 第二十题

/** * 问题: 判断一个链表是否为回文结构 * 给定一个链表的头节点head, 请判断该链表是否为回文结构. * * 例如: * 1->2->1, 返回 true. * 1->2->2-> 1, 返回 true . * 15->6-> 15, 返回 true. * 1->2->3, 返回 false. * * 解答: * 利用栈结构即可.从左到右遍历链表, 遍历的过程中把每个节点依次压入栈中. * 因为栈是先进后出的, 所以在遍历完成后, 从栈顶到

算法总结之 判断一个链表是否是回文结构

给定一个链表的头节点head,判断是否是回文结构 1->2->1 返回true 进阶: 如果链表长度N,时间复杂度O(N) 额外空间O(1) 方法一 利用栈结构(需要额外空间) 从左到右遍历,一次压栈.   这样的到的  从栈顶到栈底的节点值出现顺序会与原链表从左到右的值出现顺序相反. 废话不多说,上代码: package TT; import java.util.Stack; public class Test92 { public class Node{ public int value;

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

给定一个链表的头节点head, 请判断该链表是否为回文结构. 例如: 1->2->1, 返回true. 1->2->2->1, 返回true.15->6->15, 返回true. 1->2->3, 返回false.进阶: 如果链表长度为N, 时间复杂度达到O(N), 额外空间复杂度达到O(1). 原文地址:https://www.cnblogs.com/SkyeAngel/p/8747901.html

左神算法书籍《程序员代码面试指南》——2_06判断一个链表是否为回文结构

[题目]给定一个链表的头节点head,请判断该链表是否为回文结构.例如:1->2->1,返回true.1->2->2->1,返回true.15->6->15,返回true.1->2->3,返回false.进阶:如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1).[题解]方法一:遍历一遍链表,将数据压入栈中然后再遍历一遍链表与栈的弹出数据对比方法二:使用快慢指针,将链表的前部分压入栈,然后栈数据弹出与链表的后半部分对比方法三:使用快慢指

链表回文判断(C++)

题目描述: 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构. 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构.保证链表长度小于等于900. 测试样例: 1->2->2->1 返回:true 思路: 由于空间复杂度要求为O(1),也就是说临时占用空间和输入数据规模无关,因此无法利用数组或者是栈进行判断.因此先找到中间位置将后半部分指针翻转,然后两端分别比较.注意这种方法会修改原链表,但是空间复杂度要求为O(1)也只能这

链表学习笔记

单向链表 struct ListNode {// 单向链表 int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; 从尾到头打印链表 vector<int> TravelListFromTailToHead(struct ListNode* head) {// [从尾到头打印链表] vector<int> result; if(NULL == head) return result; Li