• 16 把第 i 个结点从链表中删除


    这里先删除第2个结点,测试 deleNode 函数

     1 /*把第i个结点从链表中删除*/
     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 deleNode(link* phead,int num) {
    65     link* tmp = phead;
    66     link* front_node = getElemByNum(tmp,num - 1);
    67     link* back_node = getElemByNum(tmp, num + 1);
    68     link* cur_node = getElemByNum(tmp,num);
    69     front_node->next = back_node;
    70     free(cur_node);
    71     showLink(tmp);
    72 }
    73 
    74 
    75 void main() {
    76     //初始化链表(1,2,3,4)
    77     printf("初始化链表为:
    ");
    78     link* phead = initByTailInsert(); //创建头指针,得到经过初始化后的头指针
    79     showLink(phead);
    80     int num = 0;
    81     printf("请输入要删除的结点的号码:");
    82     scanf("%d", &num);
    83     link* isfind = getElemByNum(phead, num);
    84     if (isfind != NULL) {
    85         //printf("第%d个元素是:%d", num, isfind->data);
    86         printf("删除第%d个结点后的链表是:
    ", num);
    87         deleNode(phead,num);
    88     }
    89     else {
    90         printf("这个结点没找到
    ");
    91     }
    92 
    93 }

  • 相关阅读:
    JavaBean
    J2EE的13个规范
    IntelliJ IDEA 常用快捷键列表及技巧大全
    服务端工程师入门与进阶 Java 版
    新兵训练营课程——环境与工具Java[转]
    asp.net 局域网中获取 client的机器名
    css 阻止元素中的文本。双击选中
    正则实践
    jq dom不存在时绑定事件
    正则预查
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12459972.html
Copyright © 2020-2023  润新知