1. 연결 리스트를 이용해 큐를 만들기
- 큐에 첫 번째 노드를 생성하는 경우(큐가 비었을 경우)
- 큐가 비지 않고 노드가 있는 경우로 나누어서 노드를 추가
void createQueueFromLinkedList(LinkedList *ll, Queue *q)
{
ListNode *cur = ll->head;
ListNode *tail, *new_Node = NULL;
if (cur == NULL)
{
return;
}
while (cur != NULL)
{
// 새로운 노드에 메모리를 할당 받아 주소값을 저장
new_Node = malloc(sizeof(ListNode));
if (q->ll.head == NULL)
{
// 큐가 비었다면 연결 리스트의 cur값의 item을 new_Node의 item에 저장
new_Node->item = cur->item;
// next는 없기 때문에 NULL
new_Node->next = NULL;
// 꼬리 노드로 지정
tail = new_Node;
// 큐의 첫 번째 노드로 연결
q->ll.head = new_Node;
}
else
{
// 큐가 비지 않았다면 연결 리스트의 cur값의 item을 new_Node의 item에 저장
new_Node->item = cur->item;
// next는 없기 때문에 NULL
new_Node->next = NULL;
// 꼬리의 다음으로 새로 생성한 노드를 연결
tail->next = new_Node;
// 꼬리를 뒤로 한 칸 이동함
tail = tail->next;
}
cur = cur->next;
}
}
1-1. 큐에서 홀수만 제거하기
void removeOddValues(Queue *q)
{
ListNode *cur = q->ll.head;
ListNode *prev = NULL;
while (cur != NULL)
{
if (cur->item % 2 == 1)
{
if (prev == NULL)
{
// 처음이 홀수일 때
q->ll.head = cur->next;
}
else
{
// 중간이 홀수일 떄
prev->next = cur->next;
}
cur = cur->next;
}
else
{
prev = cur;
cur = cur->next;
}
}
}