Removing nodes from linked list

For this one, I certainly didn't implement in the most optimal way. I moved the initial list into a proper List<int> structure to be able to run it backwards. Then, keep track of the max and remove the items properly. Then you move the resulting list back into the ListNode structure. There is a 3N time complexity here, plus the extra storage, but works. Code is down below, cheers, ACC.


2487. Remove Nodes From Linked List
Medium

You are given the head of a linked list.

Remove every node which has a node with a strictly 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.

 

Constraints:

  • The number of the nodes in the given list is in the range [1, 105].
  • 1 <= Node.val <= 105

public class Solution {
    public ListNode RemoveNodes(ListNode head)
    {
        List list = new List();

        for (ListNode temp = head; temp != null; temp = temp.next)
            list.Add(temp.val);

        int max = -1;
        int n = list.Count;
        for (int i = n - 1; i >= 0; i--)
        {
            if (max > list[i])
            {
                list.RemoveAt(i);
            }
            else
            {
                max = list[i];
            }
        }

        ListNode retVal = null;
        ListNode listTemp = null;

        foreach (int val in list)
        {
            if (listTemp == null)
            {
                retVal = new ListNode();
                listTemp = retVal;
                listTemp.val = val;
            }
            else
            {
                listTemp.next = new ListNode();
                listTemp.next.val = val;
                listTemp = listTemp.next;
            }
        }

        return retVal;

    }
}

Comments

Popular posts from this blog

Advent of Code - Day 6, 2024: BFS and FSM

Golang vs. C#: performance characteristics (simple case study)

Advent of Code - Day 7, 2024: Backtracking and Eval