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("請選擇:\n\n1、頭插法創建單鏈表\n2、尾插法創建單鏈表\n\n請你選擇創建方式:"); 59 int x; 60 scanf("%d",&x); 61 if(x==1){ 62 printf("頭插法創建單鏈表:\n\n請你輸入創建數據元素的個數:"); 63 int n; 64 scanf("%d",&n); 65 CreatList_head(L,n);//頭插法創建單鏈表 66 printList(L);//輸出 67 } 68 if(x==2){ 69 printf("尾插法創建單鏈表:\n\n請你輸入創建數據元素的個數:"); 70 int n; 71 scanf("%d",&n); 72 CreatList_tail(L,n);//頭插法創建單鏈表 73 printList(L);//輸出 74 } 75 return 0; 76 }