博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单项链表的建立(1)
阅读量:5921 次
发布时间:2019-06-19

本文共 1211 字,大约阅读时间需要 4 分钟。

链表是最基本的数据结构之一,建立单项链表步骤如下

  1. 定义链表节点
  2. 定义三个指针——头指针,尾指针,当前结点指针。并分别申请内存,初始化
  3. 判断是不是头指针,如果是,则当前结点赋值给头指针,尾指针的后继为空;如果当前不是头指针,在尾指针后追加当前结点
  4. 完成插入操作后,更新尾指针和尾指针的后继
  5. 重新申请一块内存为新的扩展节点使用

定义简单的节点结构体

1 typedef struct Node2 {3     int data;4     struct Node *next;5 } Node;

 

最后返回链表的头指针

1 Node *create() 2 { 3     int n; 4     int i; 5     Node *head=NULL; 6     Node *tail; 7     Node *p; 8     tail = (Node *)malloc(sizeof(Node)); 9     p = (Node *)malloc(sizeof(Node));10     if(p==NULL)11     {12         printf("Fail to create a new node.....");13         return NULL;14     }15     else16     {17         for(i=0; i<10; i++)18         {19             p->data=i;20             if(head==NULL)21             {22                 head=p;23                 tail->next=NULL;24             }25             else26             {27                 tail->next=p;28             }29             tail=p;30             tail->next=NULL;31             p = (Node *)malloc(sizeof(Node));32         }33     }34     return head;35 }

 

问题

在第一次写链表的时候,每次输出链表的时候总是输出尾节点的值。后来发现,原来是指针的问题。

就是每次添加一个节点时,没有新申请一块未使用的内存,而是继续使用p,而p和head都是指向头节点的(第22行),所以,使用p和head都能改变认为的头节点的值,所以每次改变p,实际上就是改变了head所指向的值。

所以,这里应该为新节点申请一块新的内存。

转载于:https://www.cnblogs.com/wktwj/p/4864774.html

你可能感兴趣的文章
03基于python玩转人工智能最火框架之TensorFlow介绍
查看>>
python-字符串X编码Xformat方法
查看>>
[Linux学习]mkdir命令
查看>>
C#_delegate - example
查看>>
obj-c的优缺点
查看>>
string
查看>>
python内置模块 (一)
查看>>
邮件本地备份策略原则
查看>>
linux 搭建apache 服务器
查看>>
各种排序算法总结
查看>>
MVC产生验证码
查看>>
动手动脑
查看>>
vue echarts 实现地图大气泡图
查看>>
php 向关联数组头部插入key value 保持数组关系不变
查看>>
niginx 负载均衡
查看>>
instancing render
查看>>
PL/SQL动态SQL
查看>>
Yslow压力测试
查看>>
最常用前端框架BootStrap——栅格系统
查看>>
锚的使用
查看>>