친구 과제 해주면서 만들었답니다.
그냥 LinkedList에 대해 아주 기초적인 깔끔한 소스에요.
더블포인터의 쓰임새를 다시 한번 상기 시켜준답니다.
#include <stdio.h>
#include <stdlib.h>
typedef struct _LinkedList
{
int data;
struct _LinkedList* next;
}LinkedList;
typedef struct _LinkedListHeader
{
LinkedList* next;
}LinkedListHeader;
void putData(LinkedListHeader* header, int data)
{
LinkedList* tmp;
tmp=(LinkedList*)malloc(sizeof(LinkedList));
tmp->data=data;
tmp->next=header->next;
header->next=tmp;
return;
}
void deleteData(LinkedListHeader* header, int data)
{
LinkedList **tmp, *tmp2;
int i;
tmp=&(header->next);
if(*tmp==NULL)
return;
while((*tmp)!=NULL)
{
if((*tmp)->data==data)
{
tmp2=(*tmp);
*tmp=(*tmp)->next;
free(tmp2);
return;
}else{
tmp=&((*tmp)->next);
}
}
return;
}
void printData(LinkedListHeader* header)
{
LinkedList *tmp;
int index=0;
tmp=header->next;
while(tmp!=NULL)
{
printf("%d node value %d\n", index, tmp->data);
index++;
tmp=tmp->next;
}
return;
}
void main(void)
{
char command;
int data;
LinkedListHeader header;
header.next=NULL;
while(1)
{
fflush(stdin);
printf("put value or delete value : ");
scanf("%c%d", &command, &data);
if(command=='p')
putData(&header,data);
else if(command=='d')
deleteData(&header,data);
printData(&header);
}
}