# Check Middle Of Linked List
```javascript=
/* The brute force solution is counting the number of nodes in the Linked List, and then finding the middle in the second iteration.
* We can do it in one iteration using the tortoise and the hare (slow and fast) problem solving pattern
1. Have two pointers, both starting at the first node
2. One pointer moves 2 nodes (hare), one moves one node (tortoise)
3. When the hare reaches the end, the tortoise will be at the middle
*/
const middle = (linkedlist) => {
let slow = linkedlist.head
let fast = linkedlist.head
while (fast !== null && fast.next !== null) {
console.log('hello')
slow = slow.next;
fast = fast.next.next;
}
return slow.value;
}
```
# Check if List is a Palindrome
```javascript=
/*
*
We will use the solution we used to find the middle of the Middle of the Linked List: https://repl.it/join/ihcufzfi-b17z
1. When we have the middle node, reverse the second half of the list
2. Compare the first half with the reversed second half to see if we have a palindrome
3. When the hare reaches the end, the tortoise will be at the middle
*/
const checkPalindrome = (linkedlist) => {
let slow = linkedlist.head
let fast = linkedlist.head
let firstHalfHead = linkedlist.head
// Find middle
while (fast !== null && fast.next !== null) {
slow = slow.next
fast = fast.next.next
}
// Reverse the second half
secondHalfHead = reverse(slow)
// Compare the first and second half
while (firstHalfHead !== null && secondHalfHead !== null) {
if (firstHalfHead.value !== secondHalfHead.value) {
break // Not a palindrome
}
firstHalfHead = firstHalfHead.next
secondHalfHead = secondHalfHead.next
}
// If both halves match
if (firstHalfHead === null || secondHalfHead === null) {
return true
}
return false
}
// Reverse Function
const reverse = (head) => {
let previous = null
while (head !== null) {
next = head.next
head.next = previous
previous = head
head = next
}
return previous
}
```