Javascript Program To Delete Nodes Which Have A Greater Value On Right Side
Last Updated : 05 Sep, 2024
Given a singly linked list, remove all the nodes which have a greater value on the right side.
Examples:
Input: 12->15->10->11->5->6->2->3->NULL Output: 15->11->6->3->NULL Explanation: 12, 10, 5 and 2 have been deleted because there is a greater value on the right side. When we examine 12, we see that after 12 there is one node with a value greater than 12 (i.e. 15), so we delete 12. When we examine 15, we find no node after 15 that has a value greater than 15, so we keep this node. When we go like this, we get 15->6->3 Input: 10->20->30->40->50->60->NULL Output: 60->NULL Explanation: 10, 20, 30, 40, and 50 have been deleted because they all have a greater value on the right side. Input: 60->50->40->30->20->10->NULL Output: No Change.
Method 1 (Simple):
Use two loops. In the outer loop, pick nodes of the linked list one by one. In the inner loop, check if there exists a node whose value is greater than the picked node. If there exists a node whose value is greater, then delete the picked node.
Time Complexity: O(n^2)
Method 2 (Use Reverse):
Thanks to Paras for providing the below algorithm.
- Reverse the list.
- Traverse the reversed list. Keep max till now. If the next node is less than max, then delete the next node, otherwise max = next node.
- Reverse the list again to retain the original order.
Time Complexity: O(n)
Thanks to R.Srinivasan for providing the code below.
JavaScript // Javascript program to delete nodes which // have a greater value on right side // head of list let head; // Linked list Node class Node { constructor(val) { this.data = val; this.next = null; } } /* Deletes nodes which have a node with greater value node on left side */ function delLesserNodes() { // 1.Reverse the linked list reverseList(); /* 2. In the reversed list, delete nodes which have a node with greater value node on left side. Note that head node is never deleted because it is the leftmost node. */ _delLesserNodes(); /* 3. Reverse the linked list again to retain the original order */ reverseList(); } /* Deletes nodes which have greater value node(s) on left side */ function _delLesserNodes() { let current = head; // Initialise max let maxnode = head; let temp; while (current != null && current.next != null) { /* If current is smaller than max, then delete current */ if (current.next.data < maxnode.data) { temp = current.next; current.next = temp.next; temp = null; } /* If current is greater than max, then update max and move current */ else { current = current.next; maxnode = current; } } } // Utility functions // Inserts a new Node at front of the function push(new_data) { /* 1 & 2: Allocate the Node & Put in the data */ let new_node = new Node(new_data); // 3. Make next of new Node as head new_node.next = head; // 4. Move the head to point to // new Node head = new_node; } // Function to reverse the linked list function reverseList() { let current = head; let prev = null; let next; while (current != null) { next = current.next; current.next = prev; prev = current; current = next; } head = prev; } // Function to print linked list function printList() { let temp = head; while (temp != null) { console.log(temp.data + " "); temp = temp.next; } console.log(); } // Driver code /* Constructed Linked List is 12->15->10->11-> 5->6->2->3 */ push(3); push(2); push(6); push(5); push(11); push(10); push(15); push(12); console.log( "Given Linked List"); printList(); delLesserNodes(); console.log("Modified Linked List"); printList(); // This code is contributed by aashish1995
OutputGiven Linked List 12 15 10 11 5 6 2 3 Modified Linked List 15 11 6 3
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(1)
Method 3:
The other simpler method is to traverse the list from the start and delete the node when the current Node < next Node. To delete the current node, follow this approach.Let us assume you have to delete current node X:
- Copy next node’s data into X i.e X.data = X.next.data.
- Copy next node’s next address i.e X.next = X.next.next.
Move forward in the List only when the current Node is > the next Node.
JavaScript // Javascript program for above approach // This class represents a single node // in a linked list class Node { constructor(val) { this.data = val; this.next = null; } } // This is a utility class for linked list // This function creates a linked list from a // given array and returns head function createLL(arr) { let head = new Node(arr[0]); let temp = head; let newNode = null; for (i = 1; i < arr.length; i++) { newNode = new Node(arr[i]); temp.next = newNode; temp = temp.next; } return head; } // This function prints given linked list function printLL(head) { while (head != null) { console.log(head.data); head = head.next; } } // Main function function deleteNodesOnRightSide(head) { if (head == null || head.next == null) return head; let nextNode = deleteNodesOnRightSide(head.next); if (nextNode.data > head.data) return nextNode; head.next = nextNode; return head; } let arr = [12, 15, 10, 11, 5, 6, 2, 3]; let head = createLL(arr); console.log("Given Linked List:"); printLL(head); head = deleteNodesOnRightSide(head); console.log("Modified Linked List:"); printLL(head); // This code is contributed by aashish1995
OutputGiven Linked List: 12 15 10 11 5 6 2 3 Modified Linked List: 15 11 6 3
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(1)
Source: https://www.geeksforgeeks.org/forum/topic/amazon-interview-question-for-software-engineerdeveloper-about-linked-lists-6
Please refer complete article on Delete nodes which have a greater value on right side for more details!
Similar Reads
JavaScript Linked List Programs
JavaScript Linked List Programs contain a list of articles based on programming. Linked List is a linear data structure that stores data in linearly connected nodes. Linked lists store elements sequentially, but doesnât store the elements contiguously like an array. S. NoArticles1JavaScript Program
5 min read
Implementation of LinkedList in Javascript
In this article, we will be implementing the LinkedList data structure in Javascript. A linked list is a linear data structure where elements are stored in nodes, each containing a value and a reference (or pointer) to the next node. It allows for efficient insertion and deletion operations. Each no
5 min read
Javascript Program For Searching An Element In A Linked List
Write a function that searches a given key 'x' in a given singly linked list. The function should return true if x is present in linked list and false otherwise. bool search(Node *head, int x) For example, if the key to be searched is 15 and linked list is 14->21->11->30->10, then functi
3 min read
Javascript Program For Inserting A Node In A Linked List
We have introduced Linked Lists in the previous post. We also created a simple linked list with 3 nodes and discussed linked list traversal.All programs discussed in this post consider the following representations of the linked list. [GFGTABS] JavaScript // Linked List Class // Head of list let he
7 min read
Javascript Program For Inserting Node In The Middle Of The Linked List
Given a linked list containing n nodes. The problem is to insert a new node with data x at the middle of the list. If n is even, then insert the new node after the (n/2)th node, else insert the new node after the (n+1)/2th node. Examples: Input : list: 1->2->4->5 x = 3Output : 1->2->3
4 min read
Javascript Program For Writing A Function To Delete A Linked List
A linked list is a linear data structure, in which the elements are not stored at contiguous memory locations. The elements in a linked list are linked using pointers. This article focuses on writing a function to delete a linked list. Implementation: [GFGTABS] JavaScript // Javascript program to de
2 min read
Javascript Program For Deleting A Linked List Node At A Given Position
Given a singly linked list and a position, delete a linked list node at the given position. Example: Input: position = 1, Linked List = 8->2->3->1->7Output: Linked List = 8->3->1->7Input: position = 0, Linked List = 8->2->3->1->7Output: Linked List = 2->3->1-
3 min read
Javascript Program For Finding Length Of A Linked List
Write a function to count the number of nodes in a given singly linked list. For example, the function should return 5 for linked list 1->3->1->2->1. Iterative Solution: 1) Initialize count as 0 2) Initialize a node pointer, current = head.3) Do following while current is not NULL a) cur
3 min read
Javascript Program For Rotating A Linked List
Given a singly linked list, rotate the linked list counter-clockwise by k nodes. Where k is a given positive integer. For example, if the given linked list is 10->20->30->40->50->60 and k is 4, the list should be modified to 50->60->10->20->30->40. Assume that k is smal
5 min read
Javascript Program For Making Middle Node Head In A Linked List
Given a singly linked list, find middle of the linked list and set middle node of the linked list at beginning of the linked list. Examples: Input: 1 2 3 4 5 Output: 3 1 2 4 5Input: 1 2 3 4 5 6Output: 4 1 2 3 5 6 The idea is to first find middle of a linked list using two pointers, first one moves o
3 min read