An algorithm to find the first duplicate element in the single linked list in javascript.
Example
Input: 10 -> 2 -> 5 -> 7 -> 9 -> 1 -> 2 1 -> 2 -> 3 -> 4 -> 5 Output: 2 -1
2
is the first duplicate element in the first list so we returned it. As second list does not contains any duplicate we returned -1
.
There are two different ways in which we can solve this problem.
Method 1: Using nested loops O(n ^ 2).
Implementation
- We will use two nested loops to find the first duplicate element in the list.
- In the outer loop we will get the current element and the sublist.
- Then we will use an inner loop to iterate the sublist and check if there is any element matching the parent loop element.
let findDuplicate = (head) => { //loop the list while(head){ //get the elm from the outer loop let elm = head.element; //Get the list after current elm let subList = head.next; while(subList){ //If elm is present in the sublist //Return it if(elm === subList.element){ return elm; } //next elm of sublist subList = subList.next; } //next elm of main list head = head.next; } return -1; }
Input: let ll = new LinkedList(); ll.append(1); ll.append(2); ll.append(3); ll.append(4); ll.append(2); ll.append(5); let head = ll.getHead(); console.log(findDuplicate(head)); Output: 2
Time complexity: O(n ^ 2).
Space complexity: O(1).
Method 2: Using Set to find the duplicate in linked list.
Implementation
- We will use the Set data structure to store the iterated elements of the linked list.
- Then while moving next in the loop we will keep checking if the element is already present in the set or not.
- If it is present then return it else return -1.
let findDuplicateTwo = (head) => { //Use set to store the elm let set = new Set(); //Loop the list while(head){ let elm = head.element; //Check if element is already present or not //If it is present then return it //Else add it to the set if(set.has(elm)){ return elm; }else{ set.add(elm); } head = head.next; } //Return -1 if no duplicates found return -1; }
Input: let ll = new LinkedList(); ll.append(1); ll.append(2); ll.append(3); ll.append(4); ll.append(10); ll.append(5); let head = ll.getHead(); console.log(findDuplicate(head)); let ll2 = new LinkedList(); ll2.append(1); ll2.append(2); ll2.append(3); ll2.append(4); ll2.append(2); ll2.append(5); let head2 = ll2.getHead(); console.log(findDuplicate(head2)); Output: -1 2
Time complexity: O(n).
Space complexity: O(n).