단순연결 리스트 공부하다가 질문올립니다
재찬
질문 제목 : 자료구조에서 단순연결 리스트를 공부하다가 오류때문에요질문 요약 :삭제를 하고 싶은데 ...오류가 납니다. 어디가 잘못되었나요?질문 내용 :
#includestdio.h
#includemalloc.h
#includeconio.h
#includestring.h
typedef struct record
{
char name[20];
int birth;
struct record* next;
}*LINK;
void list_record();
void insert(char*, int);
void insert1(char*,char*, int);
void del(char*);
LINK start;
void list_record(){
LINK current;
printf(\nstart = 0x%5x\n, start);
for(current = start; current; current = current-next)
printf(0x%5x\t%-20s 0x%5x\n,current,current-name,current-next);
}
void insert(char* name, int year)
{
LINK newone, current;
newone = (LINK)malloc(sizeof(struct record));
strcpy(newone-name, name);
newone-birth = year;
newone-next = NULL;
if(start)
{
for(current = start; current-next; current = current-next);
current-next = newone;
}
else
start = newone;
}
void insert1(char* sname, char* name, int year)
{
LINK seeker, current;
seeker=(LINK)malloc(sizeof(struct record));
strcpy(seeker-name,name);
seeker-birth= year;
for(current = start; current-next; current = current-next){
if (strcmp(current-name, sname)==0){
seeker-next= current-next;
current-next = seeker;
}
}
}
void del(char* name)
{
LINK dele, current;
for (dele=current= start; current; current=current-next)
{
if(strcmp(current-name,name)==0)
{
dele-next = current-next;
free(current);
}
dele = current;
}
}
void main()
{
start = NULL;
insert(KIM, 1996);
insert(LEE, 1961);
insert(BAE, 1962);
insert(HWANG, 1963);
insert(OH, 1964);
insert1(LEE,KANG, 1965);
puts(listing!\n);
list_record();
del(BAE);
list_record();
}
-
아이폰
전 답을 알려드리는 것 보다 힌트만 드리겠습니다. :)
두 가지의 문제가 있군요.
1. 삭제 시에, 맨 처음 노드가 삭제가 되면 start를 변경되어야 하겠죠? 근데 삭제할 데이터가 첫번 째 것일 경우 start를 update하는 부분이 없군요.
2. free(current); 이후에 왜 dele = current가 되네요? free가 호출된 이후에는 dele = current가 호출되면 안되겠죠?