April flash sale

Linked List Interview Questions and Answers For 2024

Linked lists are linear data structures in which elements are arranged in a linear manner but their position is not given by their position on the memory. Linked lists are used to implement other data structures as well. While preparing for technical interviews, you will encounter questions related to the linked lists. You are expected to have a good knowledge of concepts from linked lists, as some other linear data structures are implemented using linked lists like stacks and queues. Whether you are a fresher or experienced this article of linked list coding questions will help you in learning interview questions related to linked lists, and in this article, we will cover most of the questions ever asked in any linked list interview questions either by FAANGs or any others company.

  • 4.7 Rating
  • 60 Question(s)
  • 30 Mins of Read
  • 6714 Reader(s)


A linked list is one of the most appropriate data structures which can be used to implement stacks and queues. A variety of linked lists, like circular and doubly linked lists, make it very simple to implement other data structures. A stack operates similarly to a stack of books, where the book placed on the top most recently can be easily accessed as it is the one that was added last. This is called the LIFO principle, and in the case of queues, like in general life, we have queues; the person who is standing at the last will get a service at the very end, and this is the FIFO principle.

LRU cache is an algorithm used for page replacement by memory management systems. The LRU cache is an acronym for the Least recently used cache. It replaces any page that is not used for long and is replaced by the most recently used page whenever the memory is full. The queues and hash maps are used to implement the LRU cache. A queue is an implementation of a doubly linked list. The cache size, i.e., the total number of available frames, determines the maximum size of the queue. The least recently used pages will be near the front of the queue, while the most recently used pages will be near the back.

It will be O(N2). As in a linked list, the beginning is always the head of the list, and then you can proceed to the next pointer and the nodes to reach your desired position where an element needs to be added.

Assuming the length of the list is in the loop will take n iterations and assuming a worst case that you want to add the element at the end of the list, or you want to add the elements in a sorted manner, and the given element is the largest. In this case, by inserting n values, the number of loops will be: 


Which will be of the order of O( n2 ) 

Stack, Queue, Tables, Lists, and Linked Lists. are a few linear data structures. Linear data structures can be constructed as a continuous arrangement of data elements in the memory. It can be constructed by using an array data type. In linear Data Structures, the relationship of adjacency is maintained between the data elements.

A staple in linked list questions, be prepared to answer this one. Linked lists are like linear data structures that don't have ordered memory placements. These contain nodes that store two kinds of data, a value and a pointer which points to another node and hence tells its address. For example, you can consider boxes that are connected with each other with a rope; these boxes are certainly not placed next to each other but randomly, and each box has some item in it and a rope that shows which is the next or the previous box.

You can have four kinds of linked lists: 

  • Singly Linked lists 
  • Doubly Linked Lists 
  • Circular Linked Lists 
  • Multiple Linked lists 

About the singly linked list, as the name suggests, it is unidirectional, and each node has only one pointer, which will point to only one element. In the case of doubly linked lists, you have a bidirectional list that has nodes with two pointers, and they point to two elements, majorly previous and the next ones. If you talk about a multiply linked list, you have listed whose nodes can carry more than two pointers and more of a branched structure. Then in this circular linked list, you will have a loop somewhere at any node which will point to any of the previous nodes. 

In a singly linked list, you have a node that stores the address of the next node in the sequence that is said to contain a pointer to the next node. A single linked list only provides for one method of data traversal. For example, 2->5->10->19 is a unidirectional linked list. There is no possibility of backward traversal in a linked list.

Here you have a node that is defined by the user, and it holds two values: data and a pointer telling the address of the next node.

A doubly linked is more versatile as you can traverse in both directions in it. It is also helpful in the application of other data structures. A doubly linked list has each node having three data sets, one is the value of the node and then two pointers pointing to the previous and the next nodes.

You create each node with three data: Value, the previous pointer and the next pointer.

Each node in a multilevel linked list has a next and child pointer, and it is a 2D data structure made up of many linked lists. Pointers are used to connect all of the components. A pointer to the first node of the linked lists serves as the representation of a multilevel linked list. The first node is referred to as the head, much like the linked list. The value of the head is NULL if the multilevel linked list is empty. In a list, each node has at least three components: 1. Data. 2. A node's next node pointer. 3. The child node's pointer.

A linked list whose nodes are all connected in a circle is called a circular linked list. The start node and the last node in a circular linked list are connected to one another, forming a circle. The final NULL is absent. It can be of two types: Singly Circular linked lists and Doubly circular linked lists. There are no beginning or ending nodes in the circular linked list, and none of the nodes' next parts have a null value.

This question is an important linked list question, be ready to tackle it.

  •  A Linked List is preferred when you are working with large data sets, as these data structures are scalable and dynamic. 
  • You can modify the size on the go as per requirement, and it's nothing like you should knowing the size you are going to allocate the list; in case the data set has a variable size, you can go for the linked lists. 
  • As these data structures have pointers that store the addresses of other elements, it makes it much more convenient to perform CRUD (Create Read Update Delete) operations in optimal time and space complexity. 
  • Also when you can use this data structure to implement other data structures too, like stacks and queues. 

Yes, first, let me explain the basics of an array and a linked list. If you talk about an array is a linear data structure that stores elements of the same data type and places them in contiguous and adjacent memory locations.

Whereas a linked list is a non-primitive data structure having a collection of data elements that are not stored in a contiguous manner but are pointing to the next element. 

Some of the major differences between an array and a linked list are: 

An array is a data structure where you can store a collection of similar data types, whereas, in the linked list, there are nodes and pointers. In an array, you have elements stored in a continuous manner, whereas, in a linked list, values are stored in a random manner. In an array, you decide at the very beginning what the size will be of its, which is fixed thereafter and can’t be changed, whereas you get a dynamic size in a linked list. Elements you have in an array don’t have any relationship amongst them, whereas, in a linked list, you must specify pointers pointing to other related elements. As I have previously mentioned that elements of an array are stored in a continuous manner; hence if you want to perform any insertion or deletion in an array, you will have to traverse through an array, whereas if you see a linked list, you can simply change the pointer and perform these operations in no time. 

Each item in a linked list is treated as a separate entity by the data structure. When you create a linked list, the items are stored in multiple locations. The pointers connect the elements of a Linked List to one another. A list node contains two pieces of information: data and a pointer (also known as a pointer or reference or link) to the next node in the sequence. The final node is a reference to nothing. A linked list's "head" is the first node. It's important to remember that the head refers to the root rather than a specific node. Because the list contains no elements, the head is treated as a null reference in this case.

By allocating and releasing memory at runtime, a linked list can expand and contract. The starting size of the linked list is thus not required. There is no memory waste, and there is no need to pre-allocate memory because the linked list's size changes during runtime. Stacks and queues are created using linked lists. Linked lists make it simpler to add and remove items. Only the next pointer's address needs to be changed following the addition or deletion of an element.

Linked lists require more storage space than arrays. A linked list pointer uses extra memory to store the address of the next entry. Linking takes more time than arrays. A linked list, unlike an array by index, does not provide direct entry access. To get to mode n, you must first go through all of the preceding nodes. In a single-linked list, you can't go backward, but in a double-linked list, you can because each node has a pointer to the nodes that were connected before it. Memory is used when a back pointer is executed. The dynamic memory allocation of a linked list prevents random access.

A linked list is a linear data structure, but it doesn't have elements in a continuous position. Instead, they are placed at random places in the memory. It is one of the simplest forms of data structure, which you can widely use to implement many other kinds of data structure. It has a very simple linear shape and contains basic nodes which save data and a point. In a linked list, you basically have three kinds of pointers. The first one you have is a header pointer that points to the start of the linked list. The second pointer is the tail that points at the last node of the list, and in the case of the linked list, the last node is a NULL. The third pointer you have is the one pointing to the next node or the previous node of the linked list.

In a linked list, you may have n number of nodes connected to each other by pointers, these nodes might not be placed continuously, but we have some data in each node telling about the position of other nodes represented by the pointers. So, If you want to find out the length of a linked list, you need to find out how many nodes are present in the linked list. You can simply iterate over all the elements to count the number of elements in the list. For example, consider a linked list 6->4->10->9->15->3->12; when you go to each node of the list, you can see there are a total 7 nodes in the linked list. Hence the length of the linked list is 7.

Yes, you can find the length of such a linked list. A linked list that has a cycle is stuck in a loop, but it's possible for you to find out the length of such a linked list because the length of the linked list is the total number of distinct nodes in the linked list. First, you have to detect the cycle; then, you need to calculate the length of the cycle and the position at which it starts. The sum of these is the total number of distinct nodes in the list. The algorithm can be like taking two pointers, a slow pointer S and a fast pointer F. F advances two nodes when S advances one node. You keep traversing using the pointers until the F pointer reaches the same node as the S pointer. This is where the loop begins. Now you assume a counter with a value of 1 and start traversing S until it collides with F again; then, the value of the counter is equal to the length of the cycle and similarly find the length of the rest of the elements and add to get the length of the list.

Yes, you can do this by marking the visited nodes, and if you encounter any previous node again, then there is the insertion happening at this node. For this, you have to traverse both lists and find out if any node is revisited. And another method is to get the count of the first list and the count of the second list, then get the difference between the counts. Then you need to traverse in the large, linked list difference times, then you traverse both the lists in parallel until you find a common node which you can get by comparing the pointers, and this will be the junction node.

You can do this by reversing the lists. First of all, you reverse both lists and then compare both lists by traversing through them and then inserting the large value at the beginning of a new list, and hence you get a list with sorted elements. First, start an empty list with a head as NULL, assuming the heads of the given lists as H1 and H2, and reverse the lists. Now if the H1 becomes null before H2, you have to insert all the nodes of the list with the H2 head at the beginning of the new list. Otherwise, you do the same for the other list. This is how you can get the desired list with sorted elements.

Yes, you can insert a node at the beginning of the singly linked list. When you want to add a new node to a singly linked list, it's always added at the head of the linked list, and it then becomes the new head. Suppose you have to add an element 7 to the linked list 2->10->17->1->50 where the head is 2 as of now, but on adding this new element 7, the linked list will be 7->2->10->17->1->50 and hence the head will be changed to 7. For this, you have to allocate the data to a node, then make the first of the new node as head and then point the head to the new node.

Yes, To add a node at the end of the linked list, you will have to change the tail of the list and make it a point at the new node, and then the new node must point at the NULL and hence becomes the new tail. For example, if you want to add a node 7 at the end of the linked list 2->10->17->1->50, the list will become 2->10->17->1->50->7. For this, you have to first allocate data to a node and set its pointer pointing to the head of the list. Also, in case the linked list is empty, you have to create this new node as the head itself. Else traverse through the linked list till you reach the end of the linked list and then point the next of the last node to this new node.

Yes, Let us assume the position is 4 at which node 21 is to be inserted. You will now have to traverse till 4-1 th node is the 3rd node. As you reach the 3rd node, you should allocate memory for the new node, which needs to be added, then point the next of the new node to the next of the current node, then point the next of the current node to the new node. In between, you should also check whether the position given as input is valid or not, as it should be greater than 1 and also must not exceed the total number of nodes.

Yes, for reversing a singly linked list, you have to traverse through the linked list and at each node, you have to change the direction of the pointer as the opposite, where in the case of the head, the pointer will point at NULL and as you reach the end towards the tail on revering the pointer, the tail will now become the new head. The time complexity for this method is O(N), and the space complexity will be O(1).To implement it, you have to first start three-pointers, previous as Null, current as head and next as Null. Now iterate through the list and start a loop in which before you modify the next of the current, save the value of the next node. Now you need to update the next pointer of current with the previous, and thereafter, you need to change previous to current and the current to next.


One of the most frequently posed linked list Interview Questions, be ready for it. In the case of Arrays, if you use a Quick Sort, you generally don’t require any supplementary space for storing, but if you choose a merge sort, it will cost you an extra O(N) space for storage, where N is the length of the array so it will be quite expensive for you. This, in turn, will increase the running time of the algorithm. But if you compare the average time complexity for both the sorts, you have O(NlogN) average time complexity, which will be approximately the same for both, but the constants you will get are not the same. So, for arrays, merge sort is not optimal due to the usage of extra storage of O(N). 

In the case of a Linked List, all elements are not at adjacent positions like arrays, and you can insert an element at any place in it in O(1) space and time if you are given the reference and hence for even a merge sort you won’t be needing any extra space. As arrays have elements at contiguous positions, you can access any memory location, whereas in the linked list, you cannot for a quick sort algorithm, you need a lot of such movements, and for that, you have to move along all the elements in the list which increases the load, Whereas in merge sort it is much optimal hence you will prefer it.  

To find the mid element of a link, you can use a two-pointer method as an optimal method. In this, you have two pointers, one fast pointer and a second slow pointer. The fast one moves to double the steps of the slower pointer. You can use these when the slower one is at the center, and the fast one is at the end of the list. First of all, you need to initialize two pointers: slow_pntr and fast_pntr, and you should point them to the head node. Keep doing the traversal until fast_pntr is pointing at null or the next to the fast_pntr points at null. You should then move the slow_pntr one node and the fast_pntr two nodes simultaneously. At this point, you will see that the slow_pntr is pointing at the middle element of the linked list.

Yes, you can simply do in-order traversal on the binary tree and store the value of the previous node for every node visited. Then, for every visited node, make this the next of the previous node and set the value of its previous node as previous. For this, first, you have to create a binary tree node that has data, left pointers and right pointers. Create a pointer to the head node of the doubly linked list and Initialize the previously visited node as NULL. This value is kept static so that the same value can be visited for all recursive calls. Then you create a simple recursive function to convert a given Binary tree to a Doubly Linked List.

An XOR linked list is one in which the next pointer of the very node stores the XOR of the previous and next node’s address. So you have to traverse the singly linked list and keep track of the previous node in a pointer. And while traversing through the list, change the next pointer of every node to XOR ( prev, current -> next )

It's no surprise that this one pops up often in linked list questions in the data structure. To delete a node from the linked list, you have to, first of all, find out the node previous to the node to be deleted and then change the next to the next node of the node to be deleted and free the space occupied by the node to be deleted. In this case, no extra space is needed, so the space complexity will be O(1), and the time complexity for the worst case is O(N) when the last element is to be deleted and that for the best case is O(1) when the first element is to be deleted.

Traversing is the most basic operation in any data structure, as you use it in performing various other operations. So in the case of a linked list, you need a pointer for traversing. First of all, you start with the head and point the pointer at the head. Then you start a loop with a condition to continue looping until the pointer you created is pointing Null, and keep changing the value of the pointer as next, and once the pointer points at Null, the loop will terminate, and the traversal is completed.

Yes, Java.util is a package in Java that is used to import data structure classes and many other components like date & time, enumeration, exception handling components etc. It has pre-written code blocks for complete data structures, which you can simply import into your code to avoid writing those whole sets of code lines repeatedly. It also contains a certain set of operations for these packages for data structures; you have a stream that is used to traverse and many more. This was simply created to make the code look cleaner, manageable and easy to understand.

For this, you can use iterative reversal of the linked list. You simply traverse through the linked list and reverse every prefix of the linked list starting from the left, and in this way, you will find the lengthiest common linked list, which must start from the reversed prefix and the list existing just after the reversed prefix.

You can simply get the element at any given index from a linked list by simply traversing through the linked list and checking for the given index. For this, you will have to first initiate a counter with value 0 and loop through the linked list if the value of the counter equals the value of the index of the required node, then terminate the loop and return the current node; else, continue the loop and increase the counter by 1 and also change the pointer to the next node and keep looping until the values of the counters become equal to the required index.

To add two polynomials using a linked list, you need to have a linked list whose nodes store three values viz; the coefficient, the power of the variable and the address to the next node.

Though a circular linked list is different from a singly linked list inserting a node in it is similar to singly linked lists only. First of all, you create a node to store the value of the node to be inserted, then traverse through the list until you find the node, after which this new node has to be inserted and then point the pointer of the new node to the next to the current node and the current nodes next to the new node in this way you can simply insert a new node at any point of the circular linked list.

Given a linked list where each node has a child pointer in addition to the next pointer, which may or may not point to a different list. As indicated in the image below, these child lists may have one or more children of their own, and so on, to create a multilayer data structure. The head of the list's initial level is supplied to you. Flatten the list to make a single-level linked list with all of the nodes. You must flatten the list such that all of the first-level nodes appear first, followed by those at the second level, and so forth.

To group all the odd and the even nodes together, first, you need to find out where will the odd node start and where it ends, and the same goes for the even nodes; after that, connect the end of the odd list to the beginning of the event list. And after that, mark the end of the even linked list as Null. This code has a time complexity of order O(N) as you use a loop to traverse, and the space complexity will be O(1) as no extra space is needed, and only a few pointers are stored.

You can use hashing technique to remove duplicate elements from a linked list. For this, you traverse through the list and check if this element is already existing in the hash table or not; if yes, remove the node else, and push the node to the hash table. To implement this, you can create a set in order to create a track of the visited elements, then traverse through the list and check for each node if it's present in the hashset or not and do accordingly.

  • If you compare an array and a linked list of the same size, the memory used by the linked list will be more as each node of the linked list also stores additional data of pointers, so when you want to save memory, you can avoid linked lists. 
  • If you want to traverse in a linked list, you don't have indexes, so you have to traverse from the start to the end; hence it makes traversing slower in a linked list. 
  • If, in any scenario, you have to traverse in the reverse direction, it's not possible in a singly linked list. 
  • Gallery; you have linked images and can go to images by previous and next options. 
  • Media players; similar to galleries, you can play any media from the list and access them. 
  • You can use linked lists to schedule tasks like in Robin Scheduling. 
  • Redo as well as undo operations can be performed 
  • Dynamic management for the memory of an operating system can be performed. 


Linked lists are primarily contrasted with arrays. Arrays have faster access times in constant time for accessing random elements via index. Accessing items in a linked list takes linear time. Linked lists are fast in inserting and removing elements, and can be done in constant time if the target positions of the nodes are known, whereas arrays take linear time. Also, since linked lists are not tied to a contiguous block of available memory like arrays are, linked lists can easily grow much larger than arrays. Queues and stacks are often implemented using linked lists. This is because these structures are often large and dynamic. Queues and stacks also don't require random indexed access to elements, since elements are added and removed at the end. A linked list works well here because adding or removing elements from the end of the list can be done in constant time.

Sorting and searching linked lists may not be as common as arrays, but you can still do it. Reordering a linked list makes it easy to change the position of elements in the list by simply reassigning links to the containing nodes. Contrast this with changing the position of elements in an array. This usually means using additional temporary space to copy and move multiple other elements. However, accessing a random element is much slower in a linked list than in an array. Mergesort is preferred over quicksort using linked lists because quicksort relies heavily on random access to elements, which is slower with linked lists than with arrays. Search algorithms that operate naively on linked lists are generally slower than searches on arrays, because algorithms such as binary search do not inherently require random access. However, these algorithms can be accelerated to similar orders of complexity using techniques such as jump lists and fast and slow pointers.

To add 1 to a number represented as linked list you have to first reverse the list and then you have to traverse through all the elements of the list and keep adding one to it and if there is a carry add it to the next node and at the end again you have to reverse the list and return head.

First of all if you want to check if the links are identical or not the data in the list must be same and also the position of the nodes must also be same for the linked list. To do that a simple idea you get is traverse both the lists in parallel and then while traversing keep comparing each element encountered in the way for both the lists.

A must-know for anyone heading into a linked list interview, this question is frequently asked in linked list interview questions for experienced. A linked list is a dynamic data structure, so at a point in time, you can change its size by adding or removing elements from it. Also, every element in a linked list is stored at random positions, and each element has a node and a reference to be stored in the memory. So, linked lists have a requirement for dynamic memory, and therefore for a linked list, memory is allocated from the heap section, which is like a free memory bank, and whenever a node is required to be created, the program you write asks from the memory manager to provide a free space after this there is a garbage collector which is used to collected deleted nodes, and hence this data structure is also called a dynamic data structure. There are memory spaces where the pointers are stored and are called AVAIL, which is a list of memory locations.

For sorting a linked list, you should use a merge sort, as it is the optimal solution for sorting a linked list. Return the head of the linked list's size is 1. Otherwise, The Tortoise and the Hare Method for Finding Mid Keep the following of mid in the right sub-linked list, or head2. Now Nullify the following midway. The new head of the left and right linked lists should be stored after calling mergeSort() recursively on both the left and right sub-linked lists. Call merge() with the updated heads of the left and right sub-linked lists as parameters, and then save the resultant head. Give the merged linked list's last head. Take a pointer, say merged, and place a fake node in it along with the merged list. Take a temp pointer and give it the merge property. Store head1 in the next available temp location and move it to the next head1 if the data in head1 is less than the data in head2.Alternatively, keep head2 at the next transient location and move it to the next head2.Transfer temp to the following temp.Till head1 and head2 are not equal to null, repeat the previous steps as necessary. The remaining nodes from the first or second linked lists should now be added to the combined linked list. Return the head and the next merged, which will disregard the dummy.  

First, assume the node to be deleted as del, and if the node to be deleted is the head node itself, then modify the head pointer as the next current head and also set prev of next to del, again if next to del exists. Last set next of previous to del if previous to del exists.

Suppose there are N nodes in the list, and hence there will be N/k elements in every split part of the list and also the first N%k part will have extra remainder elements and to count the N we can simply use a loop. After this, for every part, you can calculate the number of elements each part will have by using the width of the part. 

(N/k + 1) And the left k-(N%k) groups will be of the size N/k .

A linked list is normally accessible only from its head node. From there, you can navigate from node to node until you reach the node you're looking for. So access is O(n). Similarly, searching for a specific value in a linked list requires iterating over all elements until that value is found. So the search is O(n). Inserting into a linked list requires the previous node (the node before the insertion point) to point to the inserted node, and the newly inserted node to point to the next node. So the insert is O(1). To remove from a linked list, the previous node (the node before the removed node) must be respecified as the next node (the node after the removed node). So cancellation is O(1).  

It is O(1). Note that there is no need to insert at the end of the list. Inserting at the beginning of a (unidirectionally linked) list is both O(1).Stack contains 1,2,3: [1]->[2]->[3] Push 5: [5]->[1]->[2]->[3] Pop: [1]->[2]->[3] // returning 5.

To convert a singly-linked list to a circularly-linked list, set the next pointer of the leaf node to the head pointer. Make a copy of the head pointer. Let it be temp. Loops through the linked list to the terminal node (last node) using a temporary pointer. Sets the next pointer of the leaf node to the head node. temp->next = head.

def convert(head): 
  # declare a node variable 
  # start and assign head 
  # node into start node. 
  start = head 
  # check that 
  while head.next 
  # not equal to null then head 
  # points to next node. 
  while(head.next is not None): 
   head = head.next 
  if head.next points to null 
  # then start assign to the 
  # head.next node. 
  head.next = start 
  return start 

Inserting a node in the middle of a linked list assumes you are already at the address where the node should be inserted. Indexing is considered a separate operation. So the insert itself is O(1), but getting to that intermediate node is O(n). So when appending to a linked list, no traversal is needed as long as the reference is known.

You can add two numbers represented by a LinkedList the same way you add two numbers manually. Iterate over the linked list, appending the appropriate elements, preserving the carry as you would when adding numbers by hand, and adding the carry from the previous addition to the running total. One of the most annoying parts of this problem is the number that is sent. If each pair of nodes sums up to a number less than 10, don't worry about "carrying" the number to the next node. However, adding a number such as 4 or 6 causes a carry. Even if one list is longer than the other, the nodes of the long list should be added to the solution, so the test should continue as long as the node is not null. This means that the while loop should execute as long as list 1 is not null or list 2 is not null.

Use a lockstep solution. The key to this algorithm is to first separate the two pointers p1 and p2 by n-1 nodes so that p2 points to the (n-1)th node from the beginning of the list, and then shift until p2 is at the end. That's it. You have reached a node in the list. As soon as p2 reaches the end of the list, p1 points to the Nth node from the end of the list. This lockstep approach generally improves cache utilization because the node hit by the front pointer may still be in the cache when the back pointer hits the node. For language implementations that use trace garbage collection, this approach also avoids the initial list (that is, the entire list) from being unnecessarily left active during operation. 

Another solution is to use a ring buffer. Keep a circular buffer of size x and add nodes as you iterate over the list. When the end of the list is reached, the x-th from the end is equal to the next entry in the ring buffer. The lockstep approach moves all array elements at each step, so the execution time is O(n x 2). On the other hand, the circular buffer approach uses circular arrays and runs in O(n). The circular buffer solution requires an extra x in memory. 

A simple solution is to clone the linked list, reverse it and check if both linked lists are the same. This method requires repeating the linked list three times and requires additional space to store the duplicates. A better solution is to use recursion. The idea is to reach the end of the linked list by recursion and compare if the last node has the same value as the first node and the two nodes before have the same value as his second node. That's it. The pointer at the head of the linked list is used.

We know that the height of a binary tree is the total number of nodes along the longest path from the root to a leaf node. The idea is to traverse the tree after ordering and calculate the heights of the left and right subtrees. The height of the subtree rooted at any node is one greater than the maximum height of the subtrees to its left and right. Applies this property to all tree nodes recursively from bottom to top (post order method) and returns the maximum height of the subtree rooted at this node. In a normal binary tree, the left and right children of leaf nodes are null pointers. But here the left and right children of the leaf node behave like previous and next pointers in a circularly doubly linked list. For a node to be a leaf node, ensure that its left, right and left sides point to itself.

First traverse a linked list into an array. Thereafter construct a monotonically decreasing stack from right to left. If the topmost value of each element is greater than the current value, update the topmost value to the next greater value than the current value and also push it on the stack. Otherwise, open the stack until the topmost value is greater than the current value or the stack is empty. For an empty stack, there is no next max value for the current value, simply set 0 as the next max value as needed for your problem.

Insertion sort is simply done like you sort a deck of playing cards. You take a card and look for a place to insert it so that it’s ordered. To implement this in a linked list you should first create an empty linked list then if there is no next element then make this element as head and return, else Goto the next node and compare the value with the previous one and see if it this is smaller than the head node then make this node as the head node and insert this at the start of the empty list. Now select the next node and traverse through the new empty list looking for a value greater than this value and as you find such a node you insert the node prior to this node and keep traversing in such a manner and at the end return this new list.


Top Linked List Interview Tips and Tricks

When preparing for linked list interview questions and answers you need to keep a few things in mind, whether it is any programming language. Linked list interview questions in Java are very common. You might also come across a linked list of interview questions in C as well. First of all, as linked lists are categorized as linear data structures so before moving on to prepare for coding questions on linked lists, one must be aware of the other types of linear data structures too and must know how to prepare for Array list and linked list interview questions along with it. To ace an interview, you have to, first of all, prepare how basic operations are done on the linked lists after knowing what is a linked list and its types. These operations include:  

  1. Insertion  
  2. Deletion 
  3. Traversal 
  4. Searching 
  5. Sorting 
  6. Design parts of the linked list 
  7. Print 

for each kind of list, and also have notes about the time complexity for worst and best-case scenarios. After that, you will be confident enough to understand the basics of linked lists and can confidently answer linked list interview questions for freshers after that you are good to go for preparing linked list interview questions for experienced candidates 

How to Prepare for a Linked List of Interview Questions?

To prepare well for linked list questions and answers you need to be aware of the previous year's data about interview questions. This knowledge of linked list coding interview questions will help you to predict the possibilities of what linked list coding questions might be asked. You can get an idea to think about the logic of proceeding with linked list programming questions or in any other programming language which comes across your way. A good understanding of the basic concepts will be useful before you jump to experienced-level questions, mostly in the interview. Questions will be to check whether you have a logical ability to think and approach the problem. The approach is very important for any interview. 

This list of the top linked list interview questions will help you effortlessly conquer the interviews related to:  

  • Data Scientist,  
  • Data Engineer,  
  • Software Engineer,  
  • Graduate Engineering Trainee, 
  • System Engineer, 
  • Automation Tester, 
  • Software Developer. 

The following interview questions will assist you in acing your next interview with organizations:  

  • TCS,  
  • Wipro, 
  • Cognizant, 
  • FANGs, 
  • Nagarro, 
  • NTT Data, 
  • Capgemini, 
  • Infosys, 
  • Tekion Corp, 
  • Unicorns. 

Learn more about Data Structures and Algorithms in JAVA and prepare yourself for the upcoming coding rounds. Get trained in writing efficient codes in any programing language JAVA, Python, C, etc. our Programming training will help you master your skills and ace your career in tech. 

What to Expect in a Linked List Interview Question?

Linked list interview questions are the most important for going for any technical interview, and even for FANGS, this is one of the most important topics to have command on. 

If you are a fresher, the interviewees might expect you to have a basic understanding of the linked lists so that when you work in production, you are able to understand any existing piece of code, or you can implement your basic knowledge and learn effortlessly. If you are an experienced candidate, you would be expected to answer scenario-based questions, and with having a clear understanding of the topic, you are expected to have the ability to creatively solve problems encountered during the work and effortlessly apply the basic concepts from your experience. 


Linked lists are linear data structures with unordered memory placements. These contain nodes that contain two types of data: a value and a pointer that points to another node and thus tells its address. Consider boxes that are linked together by a rope; these boxes are not necessarily placed next to each other but rather at random, and each box contains an item and a rope that indicates which box is the next or previous one. The singly linked list, as the name implies, is unidirectional, with each node having only one pointer that points to a single element. In the case of doubly linked lists, you have a bidirectional list with nodes that have two pointers that point to two elements, primarily the previous and next ones. A multiply linked list is a list whose nodes can carry more than two pointers and has a more branched structure. Then, somewhere in this circular linked list, there will be a loop that points to any of the previous nodes.  

A linked list is normally only accessible from its root node. You can then navigate from node to node until you find the node you're looking for. As a result, access is O (n). Similarly, searching for a specific value in a linked list necessitates iterating through all elements until the desired value is found. So the keyword is O (n). When inserting a node into a linked list, the previous node (the node before the insertion point) must point to the inserted node, and the newly inserted node must point to the next node. As a result, the insert is O. (1). To remove a node from a linked list, the node preceding the removed node must be respecified as the next node (the node after the removed node). 

An array stores elements in a continuous manner, whereas a linked list stores values in a random manner. In an array, the size is determined at the start and is fixed thereafter and cannot be changed, whereas a linked list has a dynamic size. An array's elements have no relationship with one another, whereas a linked list requires you to specify pointers pointing to other related elements. If you come across a linked list, simply change the pointer and perform these operations. 

Read More