Javascript Program For Finding The Length Of Longest Palindrome List In A Linked List Using O(1) Extra Space
Last Updated :
05 Sep, 2022
Given a linked list, find the length of the longest palindrome list that exists in that linked list.
Examples:
Input : List = 2->3->7->3->2->12->24
Output : 5
The longest palindrome list is 2->3->7->3->2
Input : List = 12->4->4->3->14
Output : 2
The longest palindrome list is 4->4
A simple solution could be to copy linked list content to array and then find the longest palindromic subarray in the array, but this solution is not allowed as it requires extra space.
The idea is based on iterative linked list reverse process. We iterate through the given a linked list and one by one reverse every prefix of the linked list from the left. After reversing a prefix, we find the longest common list beginning from reversed prefix and the list after the reversed prefix.
Below is the implementation of the above idea.
Javascript
<script>
class Node {
constructor() {
this .data = 0;
this .next = null ;
}
}
function countCommon(a, b) {
var count = 0;
for (; a != null && b != null ; a = a.next, b = b.next)
if (a.data == b.data)
++count;
else
break ;
return count;
}
function maxPalindrome(head) {
var result = 0;
var prev = null , curr = head;
while (curr != null ) {
var next = curr.next;
curr.next = prev;
result = Math.max(result, 2 *
countCommon(prev, next) + 1);
result = Math.max(result, 2 *
countCommon(curr, next));
prev = curr;
curr = next;
}
return result;
}
function newNode(key) {
var temp = new Node();
temp.data = key;
temp.next = null ;
return temp;
}
var head = newNode(2);
head.next = newNode(4);
head.next.next = newNode(3);
head.next.next.next = newNode(4);
head.next.next.next.next = newNode(2);
head.next.next.next.next.next = newNode(15);
document.write(maxPalindrome(head));
</script>
|
Output :
5
Time Complexity : O(n2)
Auxiliary space: O(1) it is using constant space
Note that the above code modifies the given linked list and may not work if modifications to the linked list are not allowed. However, we can finally do one more reverse to get an original list back. Please refer complete article on Length of longest palindrome list in a linked list using O(1) extra space for more details!
Share your thoughts in the comments
Please Login to comment...