leetcode2487. 연결리스트에서 노드 제거

기사 디렉토리

주제

연결된 목록의 헤드 노드 헤드를 제공합니다.

오른쪽에 있는 값이 더 큰 모든 노드를 제거합니다.

수정된 연결리스트의 헤드 노드 헤드를 반환합니다.

예시 1:
여기에 이미지 설명을 삽입하세요.

입력: head = [5,2,13,3,8]
출력: [13,8]
설명: 제거해야 할 노드는 5, 2, 3입니다.

  • 노드 13은 노드 5의 오른쪽에 있습니다.
  • 노드 13은 노드 2의 오른쪽에 있습니다.
  • 노드 8은 노드 3의 오른쪽에 있습니다.
    예 2:

입력: head = [1,1,1,1]
출력: [1,1,1,1]
설명: 각 노드의 값이 1이므로 제거해야 할 노드가 없습니다.

힌트:

주어진 목록의 노드 수는 [1, 105]
1 <= Node.val <= 105 범위에 있습니다.

문제: 2487. 연결 목록에서 노드를 제거합니다.

아이디어

단조로운 스택을 사용하고, 왼쪽에서 오른쪽으로 단조롭게 감소하는 배열을 유지하고, 노드에 값을 할당합니다.
단조로운 스택을 구성할 때 우리는 증가하지 않는 배열을 유지합니다
. 다음 노드가 맨 위 노드보다 큰 것을 발견하면 스택의 요소인 경우 스택이 비어 있거나 스택의 최상위 요소가 다음 노드보다 클 때까지 스택의 최상위 요소를 계속 팝합니다.

복잡성

시간 복잡도:

O (n) O(n)) _ _

공간 복잡도:

O (n) O (n)) _ _

암호

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:
        stack = []
        index = head
        while index!=None:
            while stack!=[] and stack[-1]<index.val:
                stack.pop()
            stack.append(index.val)
            index = index.next

        index = head
        for i in range(len(stack)):
            index.val = stack[i]
            if i!=len(stack)-1:
                index = index.next
        if index!=None : index.next = None 
        return head

추천

출처blog.csdn.net/qq_51118755/article/details/135353497