前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序员必知的算法和数据结构:用这种方法理解链表,更易懂

程序员必知的算法和数据结构:用这种方法理解链表,更易懂

作者头像
double
发布2018-07-31 17:42:54
3040
发布2018-07-31 17:42:54
举报
文章被收录于专栏:算法channel
1 链表结构

一个单链表包括一系列节点(Nodes), 每个节点包括对后继节点的引用。通常,链表最后一个节点是null,这样表明链表终止了。

对于面向对象的编程,实现链表不是困难的。我们定义一个节点类,本质上它具备递归的特性。

2 链表中的节点定义

一个节点类的定义:

代码语言:javascript
复制
1class Node { 
2   String item; 
3   Node next; 
4} 

可以看到,一个Node对象包括两个实例变量,此处默认存储类型为String,和对下一个节点的引用。

3 串起节点

首先给出一个栈结构的示意图:每个节点的元素存储值为:to be or not to be.

那么以上节点是怎么被串起来的呢?我们首先构造出第一个节点 first, 如下所示:

接下来创建second, 并且first节点指向second

同理,直到形成如下的链表图:

4 链表的基本操作

4.1 插入一个节点到链表中

假定你想要插入一个新的节点到一个链表中,做插入最简单的地方就是在链表的刚开始第一个节点处。例如插入not字符串节点到以first节点为开始的链表中,这个正也是栈结构借助链表实现的track之一。

首先我们标记下即将成为老链表头的指针到oldFirst.

然后,new 一个即将成为新头的节点

给这个新节点的两个属性赋值,OK

4.2 从链表中删除一个节点

做删除最简洁地位置也是在刚开始节点,这个比较直观,直接将first指向first.next即可,不做任何物理上的删除。

4.3 对链表遍历

代码如下所示,遍历时在不断更新x指针。

代码语言:javascript
复制
1for (Node x = first; x != null; x = x.next) 
2    StdOut.println(x.item);

列出详细的过程示意图:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档