# Insert a node at a specific position in a linked list (Linked Lists)

[문제]

 

[코드]

SinglyLinkedListNode* insertNodeAtPosition(SinglyLinkedListNode* llist, int data, int position) {
    SinglyLinkedListNode *node = new SinglyLinkedListNode(data);
    
    if(position == 0) 
    {    
        node->next = llist;
        llist = node;
    }
    
    int i = 0;
    SinglyLinkedListNode *temp = llist;
    while(i != (position-1))
    {
        temp = temp->next;
        i++;
    }
    node->next = temp->next;
    temp->next = node;
    
    return llist;
}

 

[코드설명]

연결리스트의 특정 위치에 노드를 삽입하는 문제다.

해당 문제는 2가지의 경우로 나누어서 해결했다.

    ① 연결리스트 맨 앞에 삽입할 경우

    ② 그 외의 경우

 

①같은 경우, 새로 삽입할 노드의 링크를 llist로 향하게 해서 연결리스트의 맨 앞에 자리하도록 했다.

그 후 llist를 node로 변경했다.    (head pointer 변경)

 

②같은 경우, position에 새로운 노드를 삽입해야 하므로 그 이전 노드의 정보가 필요했다.

따라서 temp가 position-1 위치의 노드를 가리키도록 했다.

temp->next의 값을 node로 변경하기 전에 temp->next의 값이 필요하므로 node->next = temp->next를 먼저 처리한다.

 

위의 연산이 끝나면 llist(head pointer)를 반환한다.

 

[채점 결과]

 

 

 

 

 

# Compare two linked lists (Linked Lists)

[문제]

 

[코드]

bool compare_lists(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) {
    SinglyLinkedListNode *temp1 = head1, *temp2 = head2;
    
    for(; temp1 && temp2; temp1 = temp1->next, temp2 = temp2->next)
    {
        if(temp1->data != temp2->data)
            return false;
    }
    
    if(!(temp1 || temp2)) return true;
    
    return false;
}

 

[코드설명]

두 개의 연결리스트의 data값을 비교하는 문제다.

두 개의 연결리스트의 data값을 탐색하기 위해 temp1과 temp2 변수를 사용했다.

for문으로 각각의 temp가 연결리스트의 헤드 노드부터 시작해서 NULL pointer까지 탐색하도록했다.

그 안에서 두 노드의 data값을 비교했고, 만약 두 값이 다르다면 false를 반환하게 했다.

 

for문 밖으로 나오면 두 개의 연결리스트 중 하나라도 끝까지 탐색했다는 뜻이다.이때는 각 temp를 비교해서 둘 다 NULL이면 두 연결리스트의 length가 같다는 뜻이므로 true를 반환한다.그게 아니면 false를 반환한다.

 

[채점 결과]

 

 

 

 

복사했습니다!