码迷,mamicode.com
首页 > 其他好文 > 详细

15 在特定结点前插入新的元素

时间:2020-03-11 00:52:27      阅读:52      评论:0      收藏:0      [点我收藏+]

标签: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 }

技术图片

 

15 在特定结点前插入新的元素

标签:typedef   first   tail   show   图片   eof   can   main   ++   

原文地址:https://www.cnblogs.com/shanlu0000/p/12459945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!