、
#include "stdio.h"
#include "stdlib.h"
typedef struct List {
int data; //數據域
struct List *next; //指針域
} List;
void TailCreatList(List *L) //尾插法建立鏈表
{
List *s, *r;//s用來指向新生成的節點。r始終指向L的終端節點。
r = L; //r指向了頭節點,此時的頭節點是終端節點。
for (int i = 0; i < 10; i++) {
s = (struct List*) malloc(sizeof(struct List));//s指向新申請的節點
s->data = i; //用新節點的數據域來接受i
r->next = s; //用r來接納新節點
r = s; //r指向終端節點
}
r->next = NULL; //元素已經全部裝入鏈表L中
//L的終端節點指針域為NULL,L建立完成
}
void HeadCreatList(List *L) //頭插法建立鏈表
{
List *s; //不用像尾插法一樣生成一個終端節點。
L->next = NULL;
for (int i = 0; i < 10; i++) {
s = (struct List*) malloc(sizeof(struct List));
s->data = i;
s->next = L->next; //將L指向的地址賦值給S;//頭插法與尾插法的不同之處主要在此,
//s所指的新節點的指針域next指向L中的開始節點
L->next = s; //頭指針的指針域next指向s節點,使得s成為開始節點。
}
}
void DisPlay(List *L) { //打印節點
List *p = L->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
List *L1, *L2;
L1 = (struct List*) malloc(sizeof(struct List));
L2 = (struct List*) malloc(sizeof(struct List));
HeadCreatList(L1);
DisPlay(L1);
TailCreatList(L2);
DisPlay(L2);
}
