본문 바로가기
HackerRank

Delete a Node

by Doromi 2023. 10. 7.
728x90
반응형
주어진 연결 리스트(Linked List)에서 특정 값을 가진 노드를 삭제하는 알고리즘 문제입니다. 이 문제의 목표는 주어진 연결 리스트에서 특정 값을 가진 노드를 찾아 제거하고, 수정된 연결 리스트를 반환하는 것입니다.

연결 리스트는 데이터 요소(Node)로 이루어진 데이터 구조로, 각 노드는 데이터와 다음 노드를 가리키는 링크(또는 포인터)로 구성됩니다. 노드를 삭제하면 해당 노드의 데이터가 연결 리스트에서 제거되며, 노드 사이의 링크가 조정되어 노드가 삭제됩니다.

문제 설명:
문제의 입력으로는 연결 리스트와 삭제할 값을 가진 노드의 데이터가 주어집니다. 주어진 연결 리스트에서 해당 값을 가진 노드를 찾아 삭제한 후, 수정된 연결 리스트를 반환해야 합니다.

알고리즘 절차:

연결 리스트를 순회하면서 삭제할 값을 가진 노드를 찾습니다.
삭제할 값을 가진 노드를 찾았을 때, 이전 노드(선행 노드)와 현재 노드를 활용하여 삭제 작업을 수행합니다.
선행 노드의 다음 노드를 현재 노드의 다음 노드로 설정하여 현재 노드를 제거합니다.
삭제된 노드는 메모리에서 해제합니다.
수정된 연결 리스트를 반환합니다.
주의: 만약 삭제해야 하는 노드가 연결 리스트의 맨 앞에 있다면, 연결 리스트의 시작 노드를 변경해야 합니다. 그렇지 않은 경우에는 중간 또는 끝에 있는 노드를 삭제하므로, 이전 노드의 링크를 조정하여 삭제합니다.



 

SinglyLinkedListNode* deleteNode(SinglyLinkedListNode* llist, int position) {
    if(position == 0){
        llist = llist->next;
    }
    else{
        
    SinglyLinkedListNode* current = llist;
    
 
    for(int i = 0;i<position-1;i++){
        current = current->next;
    }
    
    current->next = current->next->next;

    }
    return llist;

}
728x90
반응형