创建单链表(创建头结点的方式,头插入法初始化赋值)
//键盘输入若干个整数,按输入数据逆序建立一个带头结点的单链表(头插入创建单链表) #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 ,退出遍历即可。