이게 연결리스트의 중간 삽입, 삭제가 맞는지요?
맛깔손
#includestdio.h
#includestdlib.h
typedef struct Listnode
{
int data;
struct Listnode *link;
}List;
void insert_f(List **head, List **p, List *first, int value);
void delete_f(List **head, List **p, List *remove);
void print_f(List *head);
void main()
{
List *head = NULL;
List *p = NULL;
int num, insert_value;
while(1)
{
printf(\n);
printf(삽입은 1, 삭제는 2를 입력 : );
scanf(%d, &num);
if(num == 1)
{
printf(삽입할 정수 입력 : );
scanf(%d, &insert_value);
insert_f(&head, &p, head, insert_value);
print_f(head);
}
if(num == 2)
{
delete_f(&head, &p, head);
print_f(head);
}
}
}
void insert_f(List **head, List **p, List *first, int value)
{
List *insert_node;
if(*head == NULL && *p == NULL)
{
insert_node = (List *)malloc(sizeof(List));
insert_node - data = value;
insert_node - link = *head;
*head = insert_node;
}
else if(*head != NULL && *p == NULL)
{
insert_node = (List *)malloc(sizeof(List));
insert_node - data = value;
insert_node - link = *head;
*head = insert_node;
*p = *head;
}
else
{
insert_node = (List *)malloc(sizeof(List));
insert_node - data = value;
insert_node - link = first - link;
first - link = insert_node;
}
}
void delete_f(List **head, List **p, List *remove)
{
if(*head == NULL)
{
printf(삭제할 노드가 없습니다);
}
else if(remove - link != NULL)
{
remove - link = remove - link - link;
}
else if(remove - link == NULL)
{
*head = remove - link;
*p = remove - link;
}
}
void print_f(List *head)
{
while(head != NULL)
{
if(head - link == NULL)
{
printf(%d - NULL, head - data);
head = head - link;
}
else
{
printf(%d - , head - data);
head = head - link;
}
}
}
이게 연결리스트의 중간삽입, 삭제가 맞는지요?
일단 노드를 두개 만든후 그 사이에다가 쭉 삽입하고
삭제할때도 중간노드들부터 삭제한후 꼬리 머리 삭제는 하는데요.
제가 가진 자료구조 책이 제대로 된 소스가 안적혀 있어서.....;;
제가 짠 소스가 맞는지 확인할 길이 없어서 질문올립니다.
-
레이
더블 포인터. 쓰셨네요 ^^;
-
사과
감사합니다.
-
핑크펄
테스트 해보면 알죠. -_-;; 이런건 물어볼 필요가 없는거 같은데... 간단하게 함수 호출하기 전과 후의 리스트만 출력해봐도 알텐데 이렇게 질문 올리고 답변 기다리는 대신에 테스트 코드 짜서 결과 확인하는게 더 빠르겠네요...