노드를 정렬하면서 삽입을 할 때 기본적인 고려사항은 크게 4가지가 있다.
1. head == NULL
2. 가장 작은 값 삽입
3. 일반적인 경우
4. 가장 큰 값 삽입
4가지 케이스 별로 오름차순으로 노드 정렬 삽입을 구현한 예제 코드이다.
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int value;
struct node* next;
} node;
node* head = NULL;
void insertNodeSort() {
node* newNode = (node*)malloc(sizeof(node));
scanf("%d", &newNode->value);
newNode->next = NULL;
//head == NULL 일떄
if (head == NULL) {
head = newNode;
return;
}
//삽입한 값이 가장 작을 때
if (head->value > newNode->value) {
newNode->next = head;
head = newNode;
return;
}
//중간에 끼어넣는 경우
//비교하기 전에 curNode 이동, 비교 후 preNode 이동
node* curNode, *preNode;
curNode = preNode = head;
while (curNode->next != NULL) {
curNode = curNode->next;
if (curNode->value > newNode->value) {
newNode->next = curNode;
preNode->next = newNode;
}
preNode = preNode->next;
}
curNode->next = newNode; //가장 큰 값 삽입
}
'자료구조&알고리즘' 카테고리의 다른 글
[이중 연결 리스트] 노드 구조체, 노드 생성, 노드 맨 앞 추가, 생성 된 순서의 역순 연결 (0) | 2024.06.01 |
---|---|
[단일 연결 리스트] 문자열 노드 전체 제거 (0) | 2024.05.30 |
[단일 연결 리스트 ] 특정 값 노드 삭제 | 중간 값 삭제 (0) | 2024.05.25 |
[단일 연결 리스트 ] 특정 값 노드 검색 (0) | 2024.05.25 |
[단일연결 리스트] 전체 노드 삭제 (0) | 2024.05.25 |