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
Post a Comment