Code360 powered by Coding Ninjas X Code360 powered by Coding Ninjas X
Last Updated: 2 Dec, 2020

Smart Linked List

Asked in company

Problem statement

You are given a Singly Linked List of integers. The linked list is called a smart linked list if no node in the list has a greater valued node on its right side. Convert the given linked list into a smart linked list.

A singly linked list is a type of linked list that is unidirectional; that is, it can be traversed in only one direction from head to the last node (tail).
Note :
If the given linked list is already a smart linked list, you don’t have to do anything.
Input Format
The first line of input contains an integer T, the number of test cases.

The first and the only line of every test case contains the elements of the singly linked list separated by a single space and terminated by -1. Hence, -1 would never be a list element.
Output Format:
For every test case, return the modified linked list. The elements of the modified list should be single-space separated, terminated by -1.
You do not need to print anything, it has already been taken care of. Just implement the given function.
1 <= T <= 10    
1 <= N <= 5 * 10^4
-10^3 <= data <= 10^3 and data != -1

Time Limit: 1 sec


01 Approach

The idea is very simple. We will consider every node and check all the nodes to its right side. If we encounter a node with greater value in the right side of the current node, we will simply remove the current node. 


  • Traverse the linked list using two loops.
  • In the outer loop, pick every node of the linked list one by one.
  • In the inner loop, check the value of all the nodes to the right side of the picked node. If there exists a node with greater value than the picked node, remove the picked node from the linked list.
  • After the above process, return the modified linked list as it is now converted into a smart linked list.