Coding

2487. Remove Nodes From Linked List

2024-05-06 1 min read

⭐⭐⭐

題目敘述

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.

Example 1

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.

ListNode 的 class 內容

// 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; }
}

解題思路

Solution

import java.util.ArrayDeque;
import java.util.Deque;
 
class Solution {
    public ListNode removeNodes(ListNode head) {
        ListNode curr = head;
        Deque<Integer> dq = new ArrayDeque<>();
        
        while (curr != null) {
            while(dq.size() > 0 && dq.peekLast() < curr.val) {
                dq.pollLast();
            }
            dq.add(curr.val);
            curr = curr.next;
        }

        ListNode ans = new ListNode();
        ListNode temp = ans;

        while (!dq.isEmpty()) {
            temp.next = new ListNode(dq.pollFirst());
            temp = temp.next;
        }

        return ans.next;
    }
}
← Posts
meow~