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) { Listlist = 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
Post a Comment