1、头插法创建单链表(生成的链表中结点的顺序与输入的顺序相反)
//头插法创建单链表 Status CreateList_L(LinkList &L,int n){//前提L已经初始化完成 LinkList p; int a; for(int i=0;i<n;i++){ p = (LinkList)malloc(sizeof(Node)); scanf("%d",&a); p->data = a; p->next = L->next;//p指向下一个 L->next = p;//再将p给单链表L的表头 } return OK; }
2、尾插法创建单链表(与输入的顺序相同)
//尾插法创建单链表 Status CreateList_Tail(LinkList &L, int n){ LinkList p,r; r = L; int a; for(int i=0;i<n;i++){ p = (LinkList)mallco(sizeof(Node)); scanf("%d",&a); p->data = a; r->next = p; r = p; }
r->next = NULL; return OK; }
3、综合实现
1 #include<stdio.h> 2 #include<malloc.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #define OVERFLOW -2 6 typedef struct Node{ 7 int data; 8 struct Node *next; 9 }Node,*LinkList; 10 11 int ListInit_L(LinkList &L){ 12 L = (LinkList)malloc(sizeof(Node)); 13 if(!L) 14 exit(OVERFLOW); 15 L->next = NULL; 16 return 1; 17 } 18 19 20 void CreatList_head(LinkList &L, int n){ 21 LinkList p; 22 int a; 23 for(int i = 0; i < n; i++){ 24 p = (LinkList)malloc(sizeof(Node)); 25 scanf("%d",&a); 26 p->data = a; 27 p->next = L->next; 28 L->next = p; 29 } 30 } 31 32 void CreatList_tail(LinkList &L, int n){ 33 LinkList p,r; 34 r = L; 35 int a; 36 for(int i = 0; i < n; i++){ 37 p = (LinkList)malloc(sizeof(Node)); 38 scanf("%d",&a); 39 p->data = a; 40 r->next = p; 41 r = p; 42 } 43 r->next = NULL; 44 } 45 46 void printList(LinkList &L){//输出单链表 47 LinkList q; 48 q = L->next; 49 while(q){ 50 printf("%d ",q->data); 51 q = q->next; 52 } 53 } 54 55 int main(){ 56 LinkList L; 57 ListInit_L(L); 58 printf("请选择: 1、头插法创建单链表 2、尾插法创建单链表 请你选择创建方式:"); 59 int x; 60 scanf("%d",&x); 61 if(x==1){ 62 printf("头插法创建单链表: 请你输入创建数据元素的个数:"); 63 int n; 64 scanf("%d",&n); 65 CreatList_head(L,n);//头插法创建单链表 66 printList(L);//输出 67 } 68 if(x==2){ 69 printf("尾插法创建单链表: 请你输入创建数据元素的个数:"); 70 int n; 71 scanf("%d",&n); 72 CreatList_tail(L,n);//头插法创建单链表 73 printList(L);//输出 74 } 75 return 0; 76 }