1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int ElemType ; 5 6 typedef struct LNode{ 7 ElemType data; 8 struct LNode *next; 9 }LinkList; 10 11 LinkList* CreateListF(LinkList *L,ElemType a[],int n){ 12 LinkList *s; 13 int i; 14 L=(LinkList *)malloc(sizeof(LinkList)); 15 L->next=NULL;//创建头结点,其next域置为NULL 16 17 for(i=0;i<n;i++){ 18 //循环建立数据节点 19 s=(LinkList *)malloc(sizeof(LinkList)); 20 s->data=a[i]; 21 s->next=L->next; 22 L->next=s; 23 } 24 return L; 25 } 26 27 LinkList* CreateListR(LinkList *L,ElemType a[],int n){ 28 LinkList *s,*r; 29 int i; 30 L=(LinkList *)malloc(sizeof(LinkList)); 31 L->next=NULL;//创建头结点,其next域置为NULL 32 r=L; 33 34 for(i=0;i<n;i++){ 35 //循环建立数据节点 36 s=(LinkList *)malloc(sizeof(LinkList)); 37 s->data=a[i]; 38 r->next=s; 39 r=s; 40 } 41 r->next=NULL; 42 return L; 43 } 44 45 void DestroyList(LinkList *L){ 46 LinkList *pre=L,*p=L->next;//pre指向*p的前趋节点 47 while(p!=NULL){ 48 //扫描单链表L 49 free(pre); 50 pre=p;//pre、p同步往后移动一个节点 51 p=pre->next; 52 } 53 free(pre); 54 } 55 56 void DisplayList(LinkList *L){ 57 LinkList *p=L->next; 58 59 while(p!=NULL){ 60 printf("%d ",p->data); 61 p=p->next; 62 } 63 } 64 int main() 65 { 66 int a[]={1,2,3,4,5}; 67 LinkList *L; 68 //L=CreateListF(L,a,sizeof(a)/sizeof(int)); 69 L=CreateListR(L,a,sizeof(a)/sizeof(int)); 70 DisplayList(L); 71 return 0; 72 }
尾插法时的结果如下:

头插法时的结果如下:

综述:采用带头结点的头插法会使得数组元素顺序相反,而尾插法不变。