• 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
    ", 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("
    ");
    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("这个元素不存在
    ");
    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("初始化链表为:
    ");
    89     link* phead = initByTailInsert(); //创建头指针,得到经过初始化后的头指针
    90     showLink(phead);
    91 
    92     int value = 0;
    93     printf("请输入在第三个结点之前准备插入的值:");
    94     scanf("%d", &value);
    95     printf("第3个结点前插入%d后的链表是:
    ", value);
    96     insertElem(phead,3, value);
    97     printf("表的长度是:%d
    ", getLinkLength(phead));
    98 
    99 }

  • 相关阅读:
    第一次离职
    代码人生
    Array.Sort()实现细节和效率
    步入正轨
    2013,冲刺、加油!!!
    Struts2 OGNL 字符串自定义转化对象细节
    Struts2 输入格式自动校验的一些注意事项
    MySQL 5.7.17 Windows安装和启动
    关于Hibernate 5 和 Hibernate 4 在创建SessionFactory的不同点分析(解决 org.hibernate.MappingException: Unknown entity: xx类报错问题)
    Struts2 OGNL 自动转换Date类型的一些注意事项
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12459945.html
Copyright © 2020-2023  润新知