一、采用带有头结点的头插法逆向建立单链表
Linklist List_HeadInsert1(LinkList &L) //采用带有头结点的头插法逆向建立单链表 { LNode *s; //声明一个临时结点 int x; L=(LinkList)malloc(sizeof(LNode)); //创建头结点 L->next=NULL; //初始为空链表 scanf("%d",&x); //输入结点的值 while(x!=9999) { s=(LNode*)malloc(sizeof(LNode)); //创建新结点 s->data=x; s->next=L->next; //将新结点插入表中,L为头指针 L->next=s; scanf("%d",&x); } return L; }
二、采用不带有头结点的头插法逆向建立单链表
Linklist List_HeadInsert2(LinkList &L) //采用不带有头结点的头插法逆向建立单链表 { LNode *s; //声明一个临时结点 int x; L=NULL; scanf("%d",&x); //输入结点的值 while(x!=9999) { s=(LNode*)malloc(sizeof(LNode)); //创建新结点 s->data=x; if(L==NULL) // 若第一次创建节点,则将该点设置为头节点 { L=s; s->next=NULL; } else{ // 若不是第一次创建节点,则直接将新节点接到链表头 s->next=L; L=s; } scanf("%d",&x); } return L; }
三、采用带有头结点的尾插法正向建立单链表
Linklist List_TailInsert1(LinkList &L) //采用带有头结点的尾插法正向建立单链表 { LNode *s,*r; //s为临时结点,r为表尾指针 int x; L=(LinkList)malloc(sizeof(LNode)); //创建头结点 L->next=NULL; //初始为空链表 r=L; scanf("%d",&x); //输入结点的值 while(x!=9999) { s=(LNode*)malloc(sizeof(LNode)); //创建新结点 s->data=x; r->next=s; r=s; //r指向新的表尾结点 scanf("%d",&x); } r->next=NULL; //尾结点指针为空 return L; }
四、用不带有头结点的尾插法正向建立单链表
Linklist List_TailInsert2(LinkList &L) //采用不带有头结点的尾插法正向建立单链表 { LNode *s,*r; //s为临时结点,r为表尾指针 int x; L=NULL; r=L; scanf("%d",&x); //输入结点的值 while(x!=9999) { s=(LNode*)malloc(sizeof(LNode)); //创建新结点 s->data=x; if(L==NULL) // 创建链表的第一个节点 { L=s; r=s; s->next=NULL; } else{ r->next=s; r=s; } scanf("%d",&x); } r->next=NULL; //尾结点指针为空 return L; }