C 언어 --- - 링크 에 고리 가 있 는 지 판단
#include <stdio.h>
#include <stdlib.h>
#define CNT 10
typedef struct node{
int value;
struct node *next;
}list_node_t;
list_node_t *creat_node(int value);
void list_print_node(list_node_t *node_p);
void list_print_all(list_node_t *node_p);
list_node_t *list_insert_end_node(list_node_t *node_p, int value);
void list_is_ring(list_node_t *node_p);
void list_free(list_node_t *node_p);
int main(int argc, char **argv)
{
int i;
list_node_t *head = NULL;
for(i = 0; i < CNT; i++)
{
head = list_insert_end_node(head, i+1);
}
list_print_all(head);
list_is_ring(head);
list_free(head);
return 0;
}
list_node_t *creat_node(int value)
{
list_node_t *node_p;
node_p = malloc(sizeof(list_node_t));
if(node_p == NULL)
{
fprintf(stderr, "Malloc for creating node failed.
");
exit(1);
}
node_p->value = value;
node_p->next = NULL;
return node_p;
}
void list_print_node(list_node_t *node_p)
{
fprintf(stdout, "p = %p value = %2d p->next = %p
", node_p, node_p->value, node_p->next);
}
void list_print_all(list_node_t *node_p)
{
list_node_t *head = node_p;
while(head)
{
list_print_node(head);
head = head->next;
if(head == node_p)
break;
}
}
list_node_t *list_insert_end_node(list_node_t *node_p, int value)
{
list_node_t *new_node = creat_node(value);
if(new_node == NULL)
{
fprintf(stderr, "Creat new node failed.
");
exit(1);
}
if(node_p == NULL)
{
node_p = new_node;
new_node->next = node_p;
return node_p;
}
list_node_t *p = node_p;
while(p->next)
{
p = p->next;
if(p->next == node_p)
break;
}
p->next = new_node;
new_node->next = node_p;
return node_p;
}
void list_is_ring(list_node_t *node_p)
{
list_node_t *prev, *cur;
prev = cur = node_p;
while(1)
{
prev = prev->next;
//cur = cur->next->next;
if(prev == NULL)
{
fprintf(stdout, "Is not ring.
");
break;
}
else
{
fprintf(stdout, "Is ring.
");
break;
}
}
}
void list_free(list_node_t *node_p)
{
list_node_t *p = node_p;
while(p->next)
{
if(p->next == node_p)
break;
free(p);
p = p->next;
}
free(p);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.