1初始链表
1.1创建链表
//初始化链表
struct linknode*init()
{
//创建一个头结点
struct linknode*header=(struct linknode*)malloc(sizeof(struct linknode));
header->data=-1;
header->next=NULL;
//通过输入初始化这个链表
int input;
struct linknode*prear=header;//尾指针
while(1){
printf("输入插入的数据:\n");
scanf("%d",&input);
if(input!=-1){
struct linknode*newnode=(struct linknode*)malloc(sizeof(struct linknode));
newnode->data=input;
newnode->next=NULL;
prear->next=newnode;
prear=newnode;
}
else break;
}
return header;
}
1.2遍历链表
void traverse(struct linknode*header)
{
if(header==NULL)
return;
struct linknode*pCurrent=header->next;
while(pCurrent!=NULL){
printf("%d ",pCurrent->data);
pCurrent=pCurrent->next;
}
printf("\n");
}
1.3插入结点
//在值为oldvalue前插入一个新数据newvalue
void insert(struct linknode*header,int oldvalue,int newvalue)
{
if(header==NULL)
return;
struct linknode*newnode=(struct linknode*)malloc(sizeof(struct linknode));
newnode->data=newvalue;
newnode->next=NULL;
struct linknode*pCurrent=header->next;
while(pCurrent!=NULL){
if(pCurrent->next->data==oldvalue){
newnode->next=pCurrent->next;
pCurrent->next=newnode;
return;
}
else pCurrent=pCurrent->next;
}
}
1.4删除结点
//删除值为value的结点
void remove_linknode(struct linknode *header,int value)
{
if(header==NULL)
return;
struct linknode*pCurrent=header->next;
while(pCurrent!=NULL){
if(pCurrent->next->data==value){
pCurrent->next=pCurrent->next->next;
free(pCurrent->next);
break;
}
else pCurrent=pCurrent->next;
}
}
1.5清空链表
//清空
void clear(struct linknode*header)
{
if(header==NULL)
return;
struct linknode*pCurrent=header->next;
while(pCurrent!=NULL){
struct linknode*pNext=pCurrent->next;
free(pCurrent);
pCurrent=pNext;
}
header->next=NULL;
}
1.6销毁链表
//销毁链表
void destroy(struct linknode*header)
{
if(header==NULL)
return;
struct linknode*pCurrent=header;
while(pCurrent!=NULL){
struct linknode*pNext=pCurrent->next;
free(pCurrent);
pCurrent=pNext;
}
}