//鍵盤輸入若干個整數,按輸入數據逆序建立一個帶頭結點的單鏈表(頭插入創建單鏈表) #include<stdio.h> #include<stdlib.h> typedef struct Link { int data; struct Link* next; }link; //頭插入的方式初始化鏈表 link* initLink(link* head_node) { head_node = (link*)malloc(sizeof(link)); //創建頭結點 head_node->data = 0; //頭結點數據域初始化賦值為0 head_node->next = NULL; link* ptail = head_node; //頭插入賦值 printf("輸入若干個值逆序保存到鏈表中:\n"); int num = 0; while (num != -1) { //輸入-1就結束 scanf("%d", &num); link* new_node = (link*)malloc(sizeof(link)); //申請一個新節點 new_node->data = num; //給新節點賦初值 new_node->next = head_node; //新節點的指針域是最后一個結點 head_node = new_node; //新節點成為最后一個結點(頭結點,頭結點在后面) ptail = new_node; //尾指針指向這個新節點,不斷往前移動 } printf("尾指針指向的值是:%d\n", head_node->next->data); //return ptail; //將指向最后一個結點的尾指針返回 return head_node; } //遍歷鏈表(逆序建立,順序遍歷) void showLink(link* head_node) { link* tmp =head_node->next; //從頭結點的下一個結點,即第一個結點開始遍歷,避免輸出結束標志-1 while (tmp != NULL) { //if (tmp->data == -1) { // break; //順序遍歷,結束標志 -1不輸出不能這樣控制,否則一個都輸出不了 //} printf("%d ", tmp->data); tmp = tmp->next; } } void main() { link* myHeadNode = NULL; myHeadNode = initLink(myHeadNode); //獲取經過初始化的頭結點 printf("逆序建立的鏈表為:\n"); showLink(myHeadNode); }
0是頭結點中的值,可以不打印,遍歷時遍歷到 tmp->data ==0 ,退出遍歷即可。