-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpalindrome-linked-list.js
69 lines (45 loc) · 977 Bytes
/
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
/*
Given the head of a singly linked list, return true if it is a
palindrome
or false otherwise.
Example 1:
Input: head = [1,2,2,1]
Output: true
Example 2:
Input: head = [1,2]
Output: false
*/
const reverseLinkedList = (arg) => {
let current = arg
let next
let prev = null
while(current){
next = current.next
current.next = prev
prev = current
current = next
}
return prev
}
var isPalindrome = function(head){
let fast = head
let slow = head
let startPointer = head
let length = 0
while(fast && fast.next){
fast = fast.next.next
slow = slow.next
length++
}
let mid = reverseLinkedList(slow)
while(length){
length--
if(mid.val !== startPointer.val) return false
mid = mid.next
startPointer = startPointer.next
}
return true
}
/*
refrence: https://www.youtube.com/watch?v=X2R2VZjKqi8
*/