-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0234-palindrome-linked-list.js
71 lines (62 loc) · 1.4 KB
/
0234-palindrome-linked-list.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {boolean}
*/
var isPalindrome = function(head) {
/**
* solution 01
*/
// let left = head
// let counter = 0
//
// const traverse = (right) => {
// if (right === null) return true
// let res = traverse(right.next)
//
// res = res && (left.val === right.val)
// left = left.next
// return res
// }
//
// return traverse(head)
/**
* solution 02
*/
const reverse = (head) => {
let cur = head
let prev = null
let next = null
while (cur !== null) {
next = cur.next
cur.next = prev
prev = cur
cur = next
}
return prev
}
let slow = head
let fast = head
while (fast !== null && fast.next !== null) {
slow = slow.next
fast = fast.next.next
}
if (fast !== null) slow = slow.next
let left = head
let right = reverse(slow)
while (right !== null) {
if (left.val !== right.val) return false
left = left.next
right = right.next
}
return true
};
// 2022/05/08 done.
// Runtime: 203 ms, faster than 50.96% of JavaScript online submissions for Palindrome Linked List.
// Memory Usage: 68.7 MB, less than 89.18% of JavaScript online submissions for Palindrome Linked List.