본문 바로가기
스터디-공부/알고리즘

단방향 연결리스트의 중간 노드 삭제

by jonghoonpark 2023. 8. 24.

중간 노드 삭제: 단방향 연결리스트가 주어졌을 떄 중간(정확히는 가운데 노드일 필요는 없고 처음과 끝 노드만 아니면 된다)에 있는 노드 하나를 삭제하는 알고리즘을 구현하라. 단, 삭제할 노드에만 접근할 수 있다.

삭제할 노드(A) 접근 → 다음 노드(B = A.next) 접근
→ A.next = B.next, A.value = B.value 하면
A 노드가 사라지게 된다.

코드

class Node:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def delete_node_in_middle(node_to_delete):
    # 첫 번째 노드나 마지막 노드는 삭제할 수 없다고 명시되어 있기 때문에 고려하지 않음.

    # 다음 노드의 값을 현재 노드로 복사
    next_node = node_to_delete.next

    node_to_delete.next = next_node.next
    node_to_delete.val = next_node.val

node4 = Node(4)
node3 = Node(3, node4)
node2 = Node(2, node3)
node1 = Node(1, node2)
head = Node(0, node1)

print("# 삭제 전")
current_node = head
while current_node:
    print(current_node.val, end=" -> ")
    current_node = current_node.next
print("None")

delete_node_in_middle(node2)

print("# 삭제 후")
current_node = head
while current_node:
    print(current_node.val, end=" -> ")
    current_node = current_node.next
print("None")

출력

# 삭제 전
0 -> 1 -> 2 -> 3 -> 4 -> None
# 삭제 후
0 -> 1 -> 3 -> 4 -> None

Python Print

print(*objects, sep=' ', end='\n', file=None, flush=False)
print의 기본 end 값은 \n이다.

'스터디-공부 > 알고리즘' 카테고리의 다른 글

연결리스트 - 노드의 교집합 찾기  (0) 2023.08.27
리스트의 합  (0) 2023.08.25
정렬되어있지 않은 연결리스트의 중복 없애기  (0) 2023.08.23
문자열 회전  (0) 2023.08.22
행렬 90도 회전  (0) 2023.08.21

댓글