229|0

7150

帖子

11

TA的资源

版主

楼主
 

《Hello算法》5、链表插入 [复制链接]

 

在链表中插入节点非常容易。如图 4-6 所示,假设我们想在相邻的两个节点 

  • n0
 和 
  • n1
 之间插入一个新节点 
  • P
 ,则只需改变两个节点引用(指针)即可,时间复杂度为 O(1) 。

  我试着向程序中添加一个插入链表的代码:

  • void insert(ListNode *n0, ListNode *p)
  • {
  • if(n0 == NULL)
  • {
  • return;
  • }
  • if (p == NULL){
  • return;
  • }
  • p->next = n0->next;
  • n0->next = p;
  • }

在主程序中新建一个节点,执行打印后再进行打印输出,整个代码如下:

  • #include <stdio.h>
  • #include <stdint.h>
  • #include <stdlib.h>
  • typedef struct ListNode {
  • int val;
  • struct ListNode *next;
  • } ListNode;
  • ListNode *newListNode(int val) {
  • ListNode *node;
  • node = (ListNode *) malloc(sizeof(ListNode));
  • node->val = val;
  • node->next = NULL;
  • return node;
  • }
  • void insert(ListNode *n0, ListNode *p)
  • {
  • if(n0 == NULL)
  • {
  • return;
  • }
  • if (p == NULL){
  • return;
  • }
  • p->next = n0->next;
  • n0->next = p;
  • }
  • int main(void)
  • {
  • ListNode* n0 = newListNode(1);
  • ListNode* n1 = newListNode(31);
  • ListNode* n2 = newListNode(21);
  • ListNode* n3 = newListNode(4);
  • ListNode* n4 = newListNode(5);
  • //构建节点之间的引用
  • n0->next = n1;
  • n1->next = n2;
  • n2->next = n3;
  • n3->next = n4;
  • //打印出所有值
  • ListNode *p;
  • p = n0;
  • while(p)
  • {
  • printf("Node val: %d \r\n",p->val);
  • p = p->next;
  • }
  • //插入一个新节点
  • ListNode* newNode = newListNode(99);
  • if(newNode != NULL)
  • {
  • insert(n0,newNode);
  • }
  • //打印出所有值
  • printf("insert Node\r\n");
  • p = n0;
  • while(p)
  • {
  • printf("Node val: %d \r\n",p->val);
  • p = p->next;
  • }

执行后效果如下:

  • liujianhuadeiMac:hello_book liujianhua$ gcc node_test.c
  • liujianhuadeiMac:hello_book liujianhua$ ./a.out
  • Node val: 1
  • Node val: 31
  • Node val: 21
  • Node val: 4
  • Node val: 5
  • insert Node
  • Node val: 1
  • Node val: 99
  • Node val: 31
  • Node val: 21
  • Node val: 4
  • Node val: 5
  • free all

从上面的试验结果可以看到,我们插入节点是成功的。

查看本帖全部内容,请登录或者注册
点赞(1) 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表