1. 程式人生 > 實用技巧 >迴圈單鏈表

迴圈單鏈表

  1 #define _CRT_SECURE_NO_WARNINGS
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 
  5 #define ListSize 100
  6 
  7 typedef struct LNode
  8 {
  9     int data;
 10     struct LNode *next;
 11 }LNode, *LinkList;
 12 
 13 
 14 //建立一個不帶頭結點的迴圈單鏈表
 15 LinkList CreatCycleList(int n)
 16 {
17 int e; 18 LinkList head = NULL; 19 LNode *p, *q, *pre=NULL; 20 21 int flag = 0; 22 23 int i = 1; 24 q = NULL; 25 while (i <= n) 26 { 27 printf("請輸入第%d個元素:", i); 28 scanf("%d", &e); 29 //建立第一個結點 30 if (i == 1) 31 {
32 head = (LNode*)malloc(sizeof(LNode)); 33 head->data = e; 34 head->next = NULL; 35 36 pre = head; 37 38 q = head;//指標q指向連結串列最後一個結點 39 printf("第%d個節點建立完畢!\n\n\n", i); 40 } 41 else 42 { 43
if (flag == 1) 44 { 45 //建立的永遠都是下一個節點 46 p = (LNode *)malloc(sizeof(LNode)); 47 p->data = e; 48 p->next = NULL; 49 pre = pre->next; 50 pre->next = p; 51 q = p; 52 } 53 54 if (flag == 0) 55 { 56 //建立的永遠都是下一個節點 57 p = (LNode *)malloc(sizeof(LNode)); 58 p->data = e; 59 p->next = NULL; 60 61 //讓頭指標節點跟新生成的p節點連線起來 62 pre->next = p; 63 } 64 flag = 1; 65 printf("第%d個節點建立完畢!\n\n\n",i); 66 } 67 i++; 68 } 69 70 q->next = head;//將最後一個結點的指標指向第一個結點,形成迴圈的單鏈表 71 printf("指標指向完畢!\n\n\n\n"); 72 73 return head;//返回的是連結串列 74 } 75 76 void DisplayCycleList(LinkList head) 77 { 78 LNode *p; 79 p = head; 80 81 if (p == NULL) 82 { 83 //空連結串列 84 return; 85 } 86 87 while (p->next != head) 88 { 89 printf("%d ", p->data); 90 p = p->next; 91 } 92 93 //輸出最後一個結點 94 printf("%d ", p->data); 95 } 96 97 98 int main() 99 { 100 LinkList h; 101 int n; 102 103 printf("建立一個迴圈的單鏈表:\n"); 104 printf("請輸入元素的個數:"); 105 scanf("%d", &n); 106 107 printf("\n\n"); 108 //建立了迴圈的單鏈表 109 h = CreatCycleList(n); 110 111 //遍歷連結串列 112 DisplayCycleList(h); 113 114 getchar(); 115 getchar(); 116 getchar(); 117 return 0; 118 }