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