首页 > 其他 > 详细

链表的回文结构

时间:2017-06-10 11:56:45      阅读:274      评论:0      收藏:0      [点我收藏+]
时间限制:3秒 空间限制:32768K 热度指数:7637
本题知识点: 链表

题目描述

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

测试样例:
1->2->2->1
返回:true
 1 /*
 2 struct ListNode {
 3     int val;
 4     struct ListNode *next;
 5     ListNode(int x) : val(x), next(NULL) {}
 6 };*/
 7 class PalindromeList {
 8 public:
 9     bool chkPalindrome(ListNode* A) {
10         // write code here
11          if(A==NULL)   
12              return true;  
13         ListNode* slow;  
14         ListNode* fast;  
15         ListNode* temp;  
16          
17         slow=A;  
18         fast=A;  
19         
20         while(fast->next!=NULL)  
21              {  
22                 temp=slow;   //temp用来存放最后mid之前的一个元素  
23                 slow=slow->next;  
24                 fast=fast->next;  
25                 if(fast->next!=NULL)  
26                      fast=fast->next;     
27         }  
28         if(mid==A)   
29             return true;  //链表元素个数为1时;  
30         ListNode* cur;  
31   
32         temp->next=NULL;     
33         cur=slow->next;  
34         slow->next=NULL;  
35         
36         while(cur!=NULL)  
37             {  
38                temp=cur->next;     
39                cur->next=slow;  
40                slow=cur;  
41                cur=temp;  
42         }  
43           
44         while(A!=NULL && slow!=NULL)  
45             {  
46                if(A->val==slow->val)  
47                 {  
48                    A=A->next;  
49                    slow=slow->next;  
50             }  
51             else 
52                 return false;  
53         }  
54        return true;  
55        
56     }
57 };

 

链表的回文结构

原文:http://www.cnblogs.com/bxyan/p/6977844.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!