시작 노드가 "head"이고 두 개의 정수 m과 n이 있는 연결 목록이 있다고 가정합니다. 우리는 목록을 순회하고 처음 m개의 노드가 목록에 유지되고 처음 m개의 노드가 삭제된 후 다음 n개의 노드와 같은 일부 노드를 삭제해야 합니다. 연결 리스트가 끝날 때까지 이 작업을 수행합니다. 헤드 노드에서 시작하여 수정된 연결 목록이 반환됩니다.
연결 리스트 구조는 다음과 같이 주어집니다. -
Node value : <integer> next : <pointer to next node>
따라서 입력이 요소 =[1, 2, 3, 4, 5, 6, 7, 8], m =3, n =1인 경우 출력은 [1, 2, 3, 5, 6입니다. , 7, ]
이 과정에서 3개의 노드 이후의 모든 노드가 삭제되므로 결국 연결 리스트는 아래와 같이 됩니다. -
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
이전 :=머리
-
커 :=머리
-
q :=0
-
피 :=0
-
curr이 null이 아닌 동안 수행
-
q :=q + 1
-
q가 m과 같으면
-
0에서 n 사이의 i에 대해 수행
-
curr.next가 null이 아니면
-
curr :=curr의 다음
-
-
-
이전의 다음 :=현재의 다음
-
q :=0
-
-
prev :=이전의 다음
-
curr :=curr의 다음
-
-
머리 반환
예제(파이썬)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head def print_list(head): ptr = head print('[', end = "") while ptr: print(ptr.val, end = ", ") ptr = ptr.next print(']') def solve(head, m, n): prev = curr = head q = 0 p = 0 while curr: q += 1 if q == m: for i in range(n): if curr.next is not None: curr = curr.next prev.next = curr.next q = 0 prev = prev.next curr = curr.next return head head = ListNode() elements = [1, 2, 3, 4, 5, 6, 7, 8] head = make_list(elements) res = solve(head, 3, 1) print_list(res)
입력
[1, 2, 3, 4, 5, 6, 7, 8], 3, 1
출력
[1, 2, 3, 5, 6, 7,]