c++ 链表_算法学习笔记 - 链表 - 单链表的粗糙实现

常用的链表有单链表、双链表、循环链表。

概念看得再多,理解得再多,也不一定能够写得出来。所以动动手,多练习才是提升能力的关键。

有朋友留言说道:建议大家在实现之前的思考时间不要太长。一是先用自己能想到的暴力方法实现试试。另外就是在一定时间内(比如半个小时到一个小时)实在想不到就要在网上搜搜答案。有的算法很巧妙,不能生想,就能够想到的。

说的真好。毕竟从自己已有的知识出发,才知道自己所欠缺的是什么。

首先单链表是什么样的呢

d369efd6dadfc991a6f4e37dcc0c699c.png

这里用了网络的图片。

每个结点存储一个数据,还有一个指针,指向的是下一个结点。

但为了区分链表为空的情况以及方便操作链表,在A前面加了一个头结点,头结点不存储数据,头结点的指针部分,指向链表的第一个结点。如上图:Head->A->B->C->E就组成了一个单链表。

由此开始粗糙的实现单链表(Java实现):

1.先从结点开始:

public 

结点类Node,包含了一个数据data,还有一个指针next(Java这里叫引用)

有了结点类后,试试几个结点链起来

2.没有头结点的链表

public 

这样便表达了A->B->C->E这间的链表的关系,但总觉得少了点什么。有了这个链表,能做什么用,而且A->B->C->E看起来没问题,但也不够直观。对,我们应该遍历下数据,看看对不对。

PS:这里方便写代码,将class Node加了static修饰

3.链表的遍历,引入头结点的链表比较像回事

遍历从头结点开始,下一个结点,取值,下一个结点,取值,直到没有下一个结点。也就是next,next,next直到next为null

public 

执行结果

Node data: 1
Node data: 2
Node data: 3
Node data: 4
Process finished with exit code 0

写了一个traverse方法来遍历链表,不传head,直接传nodeA,开始遍历好像也可以。但是没有头结点,就处理不了空链表的情况。代码写起来比较奇怪。

PS:头结点没有存储数据,所以保留空参数的构造方法Node()。

至此,遍历已经写好。但是建立head,nodeA,nodeB,nodeC..之间的关系的代码,直接赋值的方式显得非常的简陋。是不是可以考虑起个名字叫addNode,表示链表新增了一个新的结点。因此我们可以重新审视上面的代码,上面的代码一直是聚焦在Node。head,nodeA,nodeB,nodeC...的创建和关系的建立。node建立关系后成为链表。不对,我们可以从上到下来看。关注链表。然后才是链表中的结点Node。起个链表的结构叫LinkList(这个名字听起来就像链表)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值