码迷,mamicode.com
首页 > 其他好文 > 详细

链表的回文结构

时间:2018-05-02 13:07:58      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:amp   AC   没有   color   int   占用   备份   时间复杂度   等于   

题目:

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

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

测试样例:
输入:1->2->2->1
返回:true

代码:(运行时间: 46 ms 占用内存:10952K)
 1 import java.util.*;
 2  
 3 /*
 4 public class ListNode {
 5     int val;
 6     ListNode next = null;
 7  
 8     ListNode(int val) {
 9         this.val = val;
10     }
11 }*/
12 public class PalindromeList {
13      public boolean chkPalindrome(ListNode A) {
14         Stack<Integer> stack = new Stack<>();
15         boolean bool = false;
16         if (A.next == null)
17             return true;
18         while(A.next != null)
19         {//只要没有判断出来是回文结构,就一直进行判断,直到遍历完整个链表
20             if (bool == false)
21             {
22                 stack.push(A.val);
23                 if (A.val == A.next.val)
24                 {//做一个备份进行判断是否为回文结构
25                     bool = panduan(A,(Stack<Integer>) stack.clone());
26                 }
27             }
28             A = A.next;
29         }
30         return bool;
31          
32     }
33     public boolean panduan(ListNode N ,Stack<Integer> stc) {
34         while(true) {
35         if (stc.isEmpty() && N.next == null)
36             return true;
37         else if (stc.isEmpty() || N.next == null)
38         {
39             return false;
40         }
41         else
42         {//只要从栈中出来的和数据和链表中对应的数据相等,就一直循环。  
43             N = N.next;
44             if (stc.pop() != N.val)
45                 return false;
46         }
47         }
48     }
49 }

 

链表的回文结构

标签:amp   AC   没有   color   int   占用   备份   时间复杂度   等于   

原文地址:https://www.cnblogs.com/yzl12666/p/8979396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!