[数据结构与算法]双向链表
2016-09-28 15:44
381 查看
虽然从表内第一个节点到最后一个节点的遍历操作是非常简单的,但是反向遍历链表却不是一件容易的事情。如果为Node类添加一个字段来存储指向前一个节点的连接,那么久会使得这个反向操作过程变得容易许多。当向链表插入节点的时候,为了吧数据复制给新的字段会需要执行更多的操作,但是当腰吧节点从表移除的时候就能看到他的改进效果了。
首先需要修改Node类来为累增加一个额外的链接。为了区别两个连接,这个把指向下一个节点的链接称为FLink,而吧指向前一个节点的连接称为BLink.在实例化一个Node的时候,会把这些字段都设置为Nothing.
首先需要修改Node类来为累增加一个额外的链接。为了区别两个连接,这个把指向下一个节点的链接称为FLink,而吧指向前一个节点的连接称为BLink.在实例化一个Node的时候,会把这些字段都设置为Nothing.
public class LinkedList { protected Node header; public LinkedList() { header = new Node("header"); } private Node Find(Object item) { Node current = new Node(); current = header; while (current.Element != item) { current = current.FLink; } return current; } public void Insert(Object newItem, Object after) { Node current = new Node(); Node newNode = new Node(newItem); current = Find(after); newNode.FLink = current.FLink; newNode.Blink = current; current.FLink = newNode; } public void Remove(Object n) { Node p = Find(n); if (!(p.FLink == null)) { p.Blink.FLink = p.FLink; p.FLink.Blink = p.Blink; p.FLink = null; p.Blink = null; } } private Node FindLast() { Node current = new Node(); current = header; while (!(current.FLink == null)) { current = current.FLink; } return current; } public void PrintList() { Node current = new Node(); current = header; while (!(current.FLink == null)) { Console.WriteLine(current.Element); current = current.FLink; } } public void PrintReverse() { Node current = new Node(); current = FindLast(); while (!(current.Blink == null)) { Console.WriteLine(current.Element); current = current.Blink; } } }
相关文章推荐
- 数据结构与算法_链表2_双向链表
- 数据结构与算法:双向链表
- 算法学习之数据结构之双向链表
- 数据结构与算法之双向链表
- 数据结构与算法 2、单向/双向链表
- 数据结构与算法笔记 lesson8 双向链表
- 数据结构与算法之双向链表 <二>
- 数据结构与算法(C语言版)__双向链表
- 数据结构与算法--双向链表
- 数据结构与算法----双向链表
- linux 内核常用数据结构及算法——list(循环双向链表)
- 数据结构之静态链表和双向循环链表
- php学习第一章:PHP基础语法(三)数据结构与算法:2、单向链表
- 数据结构与算法之—链表(二) 有序单链表合并
- 数据结构与算法——链表
- 数据结构之单链表取第i个元素的算法
- [数据结构算法学习] 单向链表
- 算法学习之数据结构之链表是否相交,链表是否存在环
- 数据结构课程设计-----用C#实现双向链表
- 数据结构与算法面试题汇编(1)- 链表的操作与应用