【发布时间】:2021-03-15 19:35:48
【问题描述】:
我打算反转原始的 LinkedList 并将其与反转的 LinkedList 进行比较。如果相同,则返回 true。但是,我一直得到错误的结果。我哪里做错了?
var isPalindrome = function(head) {
if(head == null || head.next == null) return true;
let reversedHead = reverse(head)
let count = 0
while (head != null && reversedHead != null) {
if(head.val != reversedHead.val) {
return false
}
head = head.next
reversedHead = reversedHead.next
}
if (head == null && reversedHead == null){
return true
} else {
return false
}
};
var reverse =(head)=> {
let prev = null
let next = new ListNode()
let curr = new ListNode()
curr = head
while(curr){
next = curr.next
curr.next = prev
prev = curr
curr = next
}
return prev
}
【问题讨论】:
-
你应该在你的 while 循环的反向部分中创建新节点,而不是之前两次。反向列表中的每个节点都需要是一个新节点。你需要复制
vals。如果您的 `reverse 计划是返回一个新的反向列表而不是修改原始列表,那么至少您应该这样做。
标签: javascript algorithm linked-list palindrome