[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;
}
}