연결 리스트 전체를 출력하는 코드 예
typedef struct node{
int value;
node_t* next;
} node_t;
void print_node(const node*t head)
{
node_t* p = head;
while(p != NULL){
printf("%d", p->value);
p = p->next;
}
}
헤드 노드
node_t* head = NULL;
해제코드
void destroy(node_t* head)
{
node_t* p = head;
while(p != NULL){
node_t* next = p->next;
free(p);
p = next;
}
}
node_t* haed = NULL
// 생략
destroy(head);
head = NULL;
삽입코드
맨 앞에 삽입하는 코드
void insert_front(node_t** phead, int n)
{
node_t* new_node;
new_node = malloc(sizeof(node_t));
new_node->value = n;
new_node->next = *phead;
*phead = new_node;
}
node_t* head = NULL;
insert_front(&head, 1);
destroy(head);
head = NULL
오름차순으로 삽입하는 코드
void insert_front(node_t** phead, int n)
{
node_t* new_node;
new_node = malloc(sizeof(node_t));
new_node->value = n;
node_t** pp = phead;
while(*pp != NULL){
if((*pp)->value >= n){
break;
}
*pp = &(*pp)->next;
}
new_node->next = *pp;
*pp = new_node;
}
노드 삭제
void remove(node_t** phead, int n)
{
node_t** pp = phead;
while(*pp != NULL){
if((*pp)->value >= n){
node_t* tmp = *pp;
*pp = (*pp)->next;
free(tmp);
break;
}
*pp = &(*pp)->next;
}
}
revert
void revert(node_t** phead)
{
node_t* next = NULL;
node_t* cur = *phead;
node_t* prev = NULL;
while(cur != NULL){
next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
*phead = prev;
}
'프로그래머 > C, C++' 카테고리의 다른 글
[포프 tv 복습] 전처리기 (0) | 2020.11.30 |
---|---|
[면접 대비] C를 사용한 해시 맵 구현 (0) | 2020.11.29 |
[포프 tv 복습] C 자료구조 기초 (0) | 2020.11.29 |
[포프 tv 복습] 레지스터, 스택 & 힙, 동적 메모리. 다중 포인터 (0) | 2020.11.28 |
[포프 tv 복습] 가변 인자 함수, 올바른 오류 처리 방법 (0) | 2020.11.26 |