您的位置:首页 > 其它

[Leetcode] Palindrome Linked List

2015-08-02 12:04 190 查看
一、因为要判断左右链表的断电的对称,可以先将节点取出,放到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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: