diff --git a/README.md b/README.md index 2d53f59..e0ddbe6 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ since 2021.10.10 / Benben - 0144.Binary Tree PreOrder Traversal - 0206.Reverse Linked List - 0226.Invert Binary Tree +- 0234.Palindrome Linked List - 0509.Fibonacci Number - 0543.Diameter of Binary Tree - 0704.Binary Search diff --git a/leetcode-easy/0234-palindrome-linked-list.js b/leetcode-easy/0234-palindrome-linked-list.js new file mode 100644 index 0000000..3d20572 --- /dev/null +++ b/leetcode-easy/0234-palindrome-linked-list.js @@ -0,0 +1,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.