标签:typedef first tail show 图片 eof can main ++
这里是在第三个结点之前插入一个值
1 /*在特定(第三个结点)结点之前插入元素*/ 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 6 //链表中节点的结构 7 typedef struct Link { 8 int data; 9 struct Link* next; 10 }link; 11 12 //链表初始化 13 link* initByTailInsert() { 14 link* phead = NULL;//创建头指针 15 link* first_node = (link*)malloc(sizeof(link));//创建第一个节点 16 //第一个结点先初始化 17 first_node->data = 1; 18 first_node->next = NULL; 19 phead = first_node;//头指针指向第一个节点 20 21 //尾插入赋值 22 for (int i = 2; i < 5; i++) { 23 link* new_node = (link*)malloc(sizeof(link)); //申请新的结点 24 new_node->data = i; 25 new_node->next = NULL; 26 first_node->next = new_node; //第一个结点的指针域指向这个新申请的结点 27 first_node = new_node; //第一个结点后移 28 } 29 30 printf("头指针指向的值是:%d\n", phead->data);//1 31 return phead; //将指向第一个结点的头指针返回 32 } 33 34 35 36 void showLink(link* phead) { 37 link* tmp = phead;//将头指针赋给tmp,tmp也是一个头指针 38 //只要tmp指针指向的结点的next不是Null,就执行输出语句。 39 while (tmp != NULL) { 40 printf("%d ", tmp->data); 41 tmp = tmp->next; 42 } 43 printf("\n"); 44 } 45 46 link* getElemByNum(link* phead,int num) { 47 int j = 1; //计数器 48 link* tmp = phead; 49 while (tmp != NULL && num>j) { 50 tmp = tmp->next; 51 j++; 52 } 53 if (tmp == NULL || num<j) { 54 //printf("这个元素不存在\n"); 55 return NULL; 56 } 57 else { 58 return tmp; 59 } 60 } 61 62 //第三个结点前插入一个数 63 void insertElem(link* phead,int elem1,int elem2) { 64 link* tmp = phead; 65 link* front_node = getElemByNum(tmp,elem1 - 1); 66 link* insert_node = (link*)malloc(sizeof(link)); 67 insert_node->data = elem2; 68 insert_node->next = getElemByNum(tmp,elem1); 69 front_node->next = insert_node; 70 showLink(tmp); 71 72 } 73 void main() { 74 //初始化链表(1,2,3,4) 75 printf("初始化链表为:\n"); 76 link* phead = initByTailInsert(); //创建头指针,得到经过初始化后的头指针 77 showLink(phead); 78 79 int value = 0; 80 printf("请输入在第三个结点之前准备插入的值:"); 81 scanf("%d", &value); 82 printf("第3个结点前插入%d后的链表是:\n", value); 83 insertElem(phead,3, value); 84 85 }
标签:typedef first tail show 图片 eof can main ++
原文地址:https://www.cnblogs.com/shanlu0000/p/12459945.html