链表及其基本操作
2015-03-17 19:51
274 查看
链表是数据项的集合,一个节点中除了存放数据项以外还有指向节点的指针。链表的主要优势是提供了重新有效的组织数据项的能力,虽然这牺牲了快速访问链表中任意节点的代价,但是其对数据操作的方便时这种代价看起来是很值得的。
一个链表的基本构成应该是一个节点内元素以及指向下一个节点的引用:
![](http://img.blog.csdn.net/20150317200149071?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDEzODM4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
同时有一个构造函数是很有必要的:
![](http://img.blog.csdn.net/20150317200648514?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDEzODM4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
构建好一个链表的数据类型后我们就能进行相应的操作了。
1:构建一条链表:构建链表的关键无非就是不断的申请出node格式的数据结构,并且通过节点内的next指针将这些结点链接起来,最后在返回链表的head引用就好了。
![](http://img.blog.csdn.net/20150317201715716?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDEzODM4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
通过上面的操作就得到一个以head为头结点的链表。
2:遍历链表:遍历链表的关键是通过head通过next指针不断的访问下一个节点,直到指向一个null。
![](http://img.blog.csdn.net/20150317202930848?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDEzODM4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3:增加一个节点:增加节点的关键是先不断的在要增加的地方打断原来的链接,然后构建一个新的链接的过程。当然在增加结点是最特殊的状况值添加末尾以及增加头结点,由于这种情况都比较简单我们不做讨论。我们讨论直接在中间添加的情况。主要的步骤是先找到位置在打断原来的链接将结点添加进去构建一个新的结点的过程。程序的实现是:
![](http://img.blog.csdn.net/20150317205219840?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDEzODM4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4:删除一个节点:其实删除结点与新增一个结点差不多,我们在这里就不进行深入的研究了。
5:链表反向:在面试中遇到最多也是相对来说比较难得结点操作是节点的反向。结点反向的关键操作是
递归版:反向当前结点时先反向后续结点
![](http://img.blog.csdn.net/20150317220307102?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDEzODM4MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
一个链表的基本构成应该是一个节点内元素以及指向下一个节点的引用:
同时有一个构造函数是很有必要的:
构建好一个链表的数据类型后我们就能进行相应的操作了。
1:构建一条链表:构建链表的关键无非就是不断的申请出node格式的数据结构,并且通过节点内的next指针将这些结点链接起来,最后在返回链表的head引用就好了。
通过上面的操作就得到一个以head为头结点的链表。
2:遍历链表:遍历链表的关键是通过head通过next指针不断的访问下一个节点,直到指向一个null。
3:增加一个节点:增加节点的关键是先不断的在要增加的地方打断原来的链接,然后构建一个新的链接的过程。当然在增加结点是最特殊的状况值添加末尾以及增加头结点,由于这种情况都比较简单我们不做讨论。我们讨论直接在中间添加的情况。主要的步骤是先找到位置在打断原来的链接将结点添加进去构建一个新的结点的过程。程序的实现是:
4:删除一个节点:其实删除结点与新增一个结点差不多,我们在这里就不进行深入的研究了。
5:链表反向:在面试中遇到最多也是相对来说比较难得结点操作是节点的反向。结点反向的关键操作是
递归版:反向当前结点时先反向后续结点
相关文章推荐
- 模拟单链表及其基本操作
- 单链表的实现及其基本操作
- 数据结构学习笔记(二) 链表之带表头结点的单链表及其基本操作
- 链表及其基本操作的JAVA实现。
- 不带头节点的单链表及其基本操作(Java实现)
- 链表,顺序表的基本操作及其实现的栈与队列
- 单链表及其基本操作(C语言实现)
- 单链表的基本操作及其应用(实验2.1)
- c语言实现链表及其基本操作
- 链表基本操作及其反转
- C语言实现单链表的基本操作及其部分面试题
- 实现单链表及其基本操作
- 单链表的存储结构及其基本操作的实现
- 单链表及其基本操作的实现
- 单链表的基本操作及其应用(实验2.1)
- c语言实现单链表数据结构及其基本操作
- 数据结构——单链表及其基本操作
- 双链表的实现及其基本操作
- C语言实现单链表的基本操作及其部分面试题
- 链表基本操作及其过程详细叙述