Remove Node from Linked List Problem LeetCode

 You are given the head of a linked list.


Remove every node which has a node with a greater value anywhere to the right side of it.


Return the head of the modified linked list.


 


Input: head = [5,2,13,3,8]
Output: [13,8]
Explanation: The nodes that should be removed are 5, 2 and 3.
- Node 13 is to the right of node 5.
- Node 13 is to the right of node 2.
- Node 8 is to the right of node 3.
Example 2:

Input: head = [1,1,1,1]
Output: [1,1,1,1]
Explanation: Every node has value 1, so no nodes are removed.




/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNodes(ListNode head) {
       
 Stack<ListNode> stack = new Stack<>();
        ListNode temp = head;

        // Step 1: Traverse and process the list
        while (temp != null) {
            while (!stack.isEmpty() && stack.peek().val < temp.val) {
                stack.pop(); // Remove smaller values
            }
            stack.push(temp);
            temp = temp.next;
        }

        // Step 2: Rebuild the list from the stack
        ListNode newHead = null, prev = null;
        while (!stack.isEmpty()) {
            ListNode node = stack.pop();
            node.next = prev;
            prev = node;
        }

        return prev;

       
    }
}

Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence