【算法导论学习-20】单链表(single linked)的实现
来源:互联网 发布:田岛美工刀片价格 编辑:程序博客网 时间:2024/06/12 19:37
参考:http://www.jb51.net/article/48164.htm
1、节点类的实现
<pre name="code" class="java">public class Node<E> { // 节点类 E data; // 节点上的数据 Node<E> next; // 指向下一个节点 Node(E e) { data = e; next = null; }}
关于节点类的说明:
java中没有指针的概念,设计Node需要一点技巧:Node<E>类的成员变量 Node<E> next,初始化用 next=null,否则该类在实例化的时候无法保证类的自包含性。
例如,Node<E> node=new Node<E>(null);表示设计出来了这样一个类:。
2、单链表的实现
注意:这里将第一个节点作为头指针,而“参考:http://www.jb51.net/article/48164.htm”没有头指针。
public class SinglyLinkedList<E> { private Node<E> preHNodeead; // 链表的头指针,为null,指向第一个结点(头结点) private Node<E> last; // 链表的尾节点 private Node<E> other = null; private int length = 0; // 节点数量 public int getLength() { return length; } /** * 无参构造方法,构造了一个仅包含空的头指针的单链表,长度仍为零 */ public SinglyLinkedList() { // 默认节点为空 preHNodeead = new Node<E>(null); } /* 将头指针指向结点Node<E> node */ public void setPreHeadNext(Node<E> node) { preHNodeead.next = node; } /* 获取头指针 */ public Node<E> getPreHead() { return preHNodeead; } /** * 添加一个节点(尾插法) * * @param data * 数据 */ public void add(E data) { if (isEmpty()) { last = preHNodeead; } Node<E> newNode = new Node<E>(data); last.next = newNode; last = newNode; length++; }
/**<span style="white-space:pre"></span> * 添加一个节点(尾插法)<span style="white-space:pre"></span> * <span style="white-space:pre"></span> * @param node<span style="white-space:pre"></span> * 结点<span style="white-space:pre"></span> */<span style="white-space:pre"></span>public void add(Node<E> node) {<span style="white-space:pre"></span>if (isEmpty()) {<span style="white-space:pre"></span>last = preHNodeead;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>last.next = node;<span style="white-space:pre"></span>last=node;<span style="white-space:pre"></span>length++;<span style="white-space:pre"></span>} /** * 判断链表是否为空 * * @return 空为true,非空为false */ public boolean isEmpty() { return length == 0; } /** * 清空链表 */ public void clear() { preHNodeead = null; length = 0; } /** * 输出所有节点 */ public void printLink() { if (isEmpty()) { System.out.println("空链表"); } else { other = preHNodeead; while (other != null) { System.out.print(other.data + "→"); other = other.next; } System.out.println(); } }}
0 0
- 【算法导论学习-20】单链表(single linked)的实现
- 【算法导论学习-21】单链表(single linked)的反转
- 【算法导论学习-23】两个单链表(single linked)求交点
- 算法导论学习笔记—Strassen算法的Java实现
- 算法导论的C++实现(签到)
- 学习算法导论的经历(1)
- 单源最短路径(Single Source Shortest Path)--《算法导论》
- 【算法导论学习-17】stack的数组实现
- 【算法导论学习-18】queue的数组实现
- 算法导论学习:插入排序法的实现
- 算法导论学习:归并排序法的实现
- 《算法导论》学习笔记之Chapter10---队列的数组实现
- 算法导论学习笔记(四):求X的N次方的二分实现
- 算法导论学习日记(7)冒泡排序的递归实现
- 算法导论学习(一)
- 算法导论学习(二)
- 算法导论学习笔记(Java实现)
- 算法导论学习-插入排序python实现
- V - Ice-cream Tycoon(线段树)
- Writing GNU Emacs Extensions ch1 要点
- TS数据结构分析
- ubuntu server 14.04 搭建svn服务器
- POJ 3680 Intervals(费用流+离散化)
- 【算法导论学习-20】单链表(single linked)的实现
- hdoj 2829 斜率优化DP
- tailq
- 动态内存分配
- 使用Eclipse对FFMpeg进行调试
- POJ1068
- yum 和 rpm的不同
- [Windows问题-3] C#转换成DLL文件
- 理解 Linux 的硬链接与软链接(二)