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

[Leetcode] Palindrome Linked List

时间:2015-08-02 13:06:59      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

一、因为要判断左右链表的断电的对称,可以先将节点取出,放到vector当中,然后使用随机访问的方式对其进行对称性判断

空间复杂度为 O(n),时间复杂度为O(n)

二、可否将空间复杂度降下来,可以采用两个指针,将链表分为两部分。

dummy->head

从dummy开始一个指针每次前进一步,另一个指针每次前进两步,当比较快的指针的下一个节点为空(偶数个node)或者下一个节点的下一个节点为空(奇数个节点)的时候停止。

这是实际上将原来的链表划分为了两部分,对其中一个链表进行reverse,然后进行match,最后在恢复链表。

空间复杂度为 O(1),时间复杂度为O(n)

三、实际上有一个很巧妙的方法,可以使用递归来做。

使用一个节点left记录最左端的节点,进行递归的遍历,当访问到最右端节点时,进行match,然后将left指向下一个节点,然后递归返回,下一个会是另一对对称节点进行比较

left = head;

dp(root){

   if root = null return true;

   if(dp(root.next)==false) return false;

   #match

   if(root.val!=left.val) return false;

   else{

     left=left.next;

     return true;

  }

}

[Leetcode] Palindrome Linked List

标签:

原文地址:http://www.cnblogs.com/deepblueme/p/4695480.html

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