# 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를 반환한다.
[채점 결과]
'알고리즘' 카테고리의 다른 글
[HackerRank] Find Merge Point of Two Lists / Reverse a doubly linked list (0) | 2021.08.09 |
---|---|
[HackerRank] Merge two sorted linked lists / Get Node Value (0) | 2021.07.19 |
[HackerRank] Print in Reverse / Delete a Node (0) | 2021.07.18 |
[HackerRank] Left Rotation / Dynamic Array (0) | 2021.07.14 |
[HackerRank] Jesse and Cookies / Insertion Sort - Part 1 (0) | 2021.07.09 |