본문 바로가기
HackerRank

Insert a node at a specific position in a linked list

by Doromi 2023. 10. 7.
728x90
반응형
주어진 연결 리스트(Linked List)의 특정 위치에 새로운 노드를 삽입하는 알고리즘 문제입니다. 이 문제의 목표는 주어진 연결 리스트의 원하는 위치에 새로운 노드를 추가하여 연결 리스트를 수정하는 것입니다.

연결 리스트는 데이터 요소(Node)로 이루어진 데이터 구조로, 각 노드는 데이터와 다음 노드를 가리키는 링크(또는 포인터)로 구성됩니다. 연결 리스트의 특정 위치에 새로운 노드를 추가하려면 해당 위치를 정확하게 식별하고, 새로운 노드를 해당 위치 앞 노드와 뒷 노드 사이에 삽입해야 합니다.

문제 설명:
문제의 입력으로는 연결 리스트, 추가할 데이터, 그리고 추가할 위치(일반적으로 0부터 시작하는 인덱스)가 주어집니다. 연결 리스트의 주어진 위치에 새로운 노드를 추가하고, 그 결과로 수정된 연결 리스트를 반환해야 합니다.

알고리즘 절차:

추가할 데이터를 가지는 새로운 노드를 생성합니다.
연결 리스트의 시작 노드부터 시작하여 주어진 위치까지 이동합니다. 이때, 현재 노드와 다음 노드를 추적하며 이동합니다.
목표 위치에 도달한 후, 새로운 노드의 다음 노드를 현재 노드의 다음 노드로 설정하고, 현재 노드의 다음 노드로 새로운 노드를 설정합니다.
수정된 연결 리스트를 반환합니다.
이렇게 하면 새로운 노드가 연결 리스트의 원하는 위치에 추가되고, 연결 리스트의 구조가 유지됩니다. 만약 목표 위치가 연결 리스트의 길이를 넘어서면, 새로운 노드는 연결 리스트의 끝에 추가됩니다.
SinglyLinkedListNode* insertNodeAtPosition(SinglyLinkedListNode* llist, int data, int position) {
    SinglyLinkedListNode* newNode = new SinglyLinkedListNode(data);
        SinglyLinkedListNode* current = llist;
    for(int i = 1;i<position;i++){
        current=current->next;
    }
    newNode->next= current->next;
    current->next = newNode;
    return llist;
}
728x90
반응형

'HackerRank' 카테고리의 다른 글

Print in Reverse(Linked List)  (0) 2023.10.08
Delete a Node  (0) 2023.10.07
Insert a node at the head of a linked list  (0) 2023.10.07
Insert a Node at the Tail of a Linked List  (0) 2023.10.07
Print the Elements of a Linked List  (0) 2023.10.07