원형 리스트
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int data;
struct ListNode *link;
} ListNode;
void insert_first(ListNode **head, ListNode *node)
{
if (*head == NULL)
{
*head = node; // 헤드는노드
node->link = node; // 노드의 다음 주소는 노드
}
else {
node->link = (*head)->link; // 노드의 다음주소는 헤드의 주소
(*head)->link = node; // 헤드의 다음주소는 노드
}
}
void insert_last(ListNode **head, ListNode *node)
{
if (*head == NULL)
{
*head = node; //헤드의 주소는 노드
node->link = node; //노드의 다음주소는 노드
}
else {
node->link = (*head)->link; // 노드의 다음 주소는 헤드
(*head)->link = node; // 헤드의 다음주소는 노드
*head = node; // 헤드의 주소는 노드
}
}
void error(char *mes)
{
fprintf(stderr, "%s\n", mes);
exit(1);
}
ListNode *creat_node(int data, ListNode *link)
{
ListNode *new_node;
new_node = (ListNode *)malloc(sizeof(ListNode));
if (new_node == NULL) error("메모리 할당 에러");
new_node->data = data;
new_node->link = link;
return(new_node);
}
void display(ListNode *head)
{
ListNode *p;
if (head == NULL) return;
p = head;
do
{
printf("%d ->", p->data);
p = p->link;
} while (p != head);
}
void main(void)
{
ListNode *list1 = NULL;
insert_first(&list1, creat_node(10, NULL));
insert_first(&list1, creat_node(20, NULL));
insert_last(&list1, creat_node(30, NULL));
display(list1);
}
결과 :