看了一點網上的代碼,結合自己對連結清單的了解。将對連結清單常用的操作集合程式化如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int Val;
struct Node *next;
}List;
List *list_add(List **p,int Val);//此處是二級指針
void List_Print(List *p);
List *list_insert(List **p,int Val,int i);//i為插入的位置 Val插入的值
List *list_remove(List **p,int i);//删除指定位置i的值
int main()
{
List *n=NULL;
list_add(&n,0);
list_add(&n,1);
list_add(&n,2);
list_add(&n,3);
list_add(&n,4);
list_insert(&n,5,3);
list_insert(&n,6,2);
list_remove(&n,2);
list_remove(&n,3);
List_Print(n);
return 0;
}
List *list_remove(List **p,int i)//删除指定位置i的值
{
int count=0;
List *q,*a;
a=*p;
if(p==NULL)
return NULL;
for(count=0;count<(i-2);count++)
{
a=a->next;
if(a==NULL)
return NULL;
}
q=a->next;//後繼元
a->next=q->next;
return *p;
}
List *list_insert(List **p,int Val,int i)
{
int count=0;
List *q,*a;
a=*p;
if(p==NULL)
return NULL;
for(count=0;count<(i-2);count++)
{
a=a->next;
if(a==NULL)
return NULL;
}
q=a->next;//後繼元
List *temp=(List *)malloc(sizeof(List));
temp->next=q;
temp->Val=Val;
a->next=temp;
return *p;
}
List *list_add(List **p,int Val)//此處是二級指針
{
if(p==NULL)
return NULL;
List *temp=(List *)malloc(sizeof(List));
temp->next=*p;
temp->Val=Val;
*p=temp; //頭指針移動到開始處 *P在此處的作用為頭指針
return *p;
}
void List_Print(List *p)
{
if(p==NULL)
printf("list is empty\n");
while(p)
{
printf("%d\t",p->Val);
p=p->next;
}
}