F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

[Leetcode] Palindrome Linked List

一、因为要判断左右链表的断电的对称,可以先将节点取出,放到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;

  }

}

posted on 2015-08-02 12:04  F_G  阅读(116)  评论(0编辑  收藏  举报