연결리스트 후방삽입은 되는데 후방삭제가 안되고 있습니다...;;
키다리
#includestdio.h
#includestdlib.h
typedef struct Listnode
{
int data;
struct Listnode *link;
}List;
void insert_f(List **head, List **p, List *last, int value);
void delete_f(List **head, List **p, List **bp, List *remove);
void print_f(List *head);
void main()
{
List *head = NULL;
List *p = NULL;
List *bp;
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, &bp, head);
print_f(head);
}
}
}
void insert_f(List **head, List **p, List *last, int value)
{
List *insert_node;
List *temp;
if(*head == NULL)
{
insert_node = (List *)malloc(sizeof(List));
insert_node - data = value;
insert_node - link = *head;
*head = insert_node;
}
else
{
insert_node = (List *)malloc(sizeof(List));
insert_node - data = value;
while(last - link != NULL)
{
last = last - link;
}
last - link = insert_node;
insert_node - link = NULL;
*p = insert_node;
}
}
void delete_f(List **head, List **p, List **bp, List *remove)
{
List *del;
List *temp;
if(*head == NULL)
{
printf(삭제할 노드가 없습니다);
}
else
{
while(remove - link != NULL)
{
if(remove - link - link == NULL)
{
*bp = remove;
}
remove = remove - link;
}
*bp = *p;
remove - link = NULL;
*p = remove;
}
}
void print_f(List *head)
{
while(head != NULL)
{
printf(%d - , head - data);
head = head - link;
}
}
후방삽입은 되는데 후방삭제가 안되고 있습니다....;;
일단 널을 가리키는 끝 노드의 주소를 가진 변수가 있어야 되고
널을 가리키는 노드의 바로앞 노드의 주소가 있어야 한다는건 알겠는데.....;;
이걸 어떻게 코딩해야 될지 막막하네요.....;;
7시간동안 이것만 붙잡고 헤매다가 질문올립니다.
제발 알려주세요.
-
수리
감사합니다.
-
물보라
저도 한참 연결리스트를 공부 하고 있는 사람으로서~ head의 값은 자체가 포인터 변수 이기 때문에 꼭 함수에서 매개변수로 넘기지 않고 함수 내에서 그냥 호출해도 되지 않나요?
-
Judicious
void delete_f(List** head)
{
\tif ( *head == NULL )
\t{
\t\tprintf(\No node to delete\\n\);
\t}
\telse if ( (*head)-link == NULL )
\t{
\t\tprintf(\delete head node\\n\);
\t\tfree(*head);
\t}
\telse
\t{
\t\tList*\tlast = *head;
\t\tList*\tdel = last-link;
-
머슴밥
일단 다른 거 안 고치고 해보려고 했는데 급히 해서 확실히 보진 못했지만 기본적인 동작은 될겁니다. 해보시고 안 되면 다시 올려보세요~
void insert_f(List** head, int value)
{
\tif ( *head == NULL )
\t{
\t\t*head = (List*)malloc(sizeof(List));
\t\t(*head)-data = value;
\t\t(*head)-link = NULL;
\t}
\telse
\t{
\t\t