package com.leo_faith.www;
public class Node {
Object data;
Node next;
Node(Object d) {
data = d;
next = null;
}
}
package com.leo_faith.www;
public class LinkList {
/* 用变量来实现表头 */
private Node Head = null;
private Node Tail = null;
private Node Pointer = null; //point to previous
private int Length = 0;
public void deleteAll() {// 清空整个链表
Head = null;
Tail = null;
Pointer = null;
Length = 0;
}
// 链表复位,使第一个节点成为当前节点
public void reset() {
Pointer = null;
}
// 判断链表是否为空
public boolean isEmpty() {
return (Length == 0);
}
// 判断当前结点是否为最后一个结点
public boolean isEnd() {
if (Length == 0)
throw new java.lang.NullPointerException();
else if (Length == 1)
return true;
else
return (cursor() == Tail);
}
// 返回当前结点的下一个结点的值,并使其成为当前结点
public Object nextNode() {
if (Length == 1)
throw new java.util.NoSuchElementException();
else if (Length == 0)
throw new java.lang.NullPointerException();
else {
Node temp = cursor();
Pointer = temp;
if (temp != Tail)
return (temp.next.data);
else
throw new java.util.NoSuchElementException();
}
}
// 返回当前结点的值
public Object currentNode() {
Node temp = cursor();
return temp.data;
}
// 在当前结点前插入一个结点,并使其成为当前结点
public void insert(Object obj) {
Node e = new Node(obj);
if (Length == 0) {
Tail = e;
Head = e;
} else {
Node temp = cursor();
e.next = temp;
if (Pointer == null)
Head = e;
else
Pointer.next = e;
}
Length++;
}
// 返回链表的大小
public int size() {
return Length;
}
// 将当前结点移出链表,下一个结点成为当前结点,
// 如果移出的结点是最后一个结点,
// 则第一个结点成为当前结点
public Object remove() {
Object temp;
if (Length == 0)
throw new java.util.NoSuchElementException();
else if (Length == 1) {
temp = Head.data;
deleteAll();
} else {
Node cur = cursor();
temp = cur.data;
if (cur == Head)
Head = cur.next;
else if (cur == Tail) {
Pointer.next = null;
reset();
} else
Pointer.next = cur.next;
Length--;
}
return temp;
}
// 返回当前结点的指针
private Node cursor() {
if (Head == null)
throw new java.lang.NullPointerException();
else if (Pointer == null)
return Head;
else
return Pointer.next;
}
// 链表的简单应用举例
public static void main(String[] args) {
LinkList a = new LinkList();
for (int i = 1; i <= 10; i++)
a.insert(new Integer(i));
System.out.println("The currentNode is:" + a.currentNode());
while (!a.isEnd())
System.out.println("The nextNode is:" + a.nextNode());
a.reset();
while (!a.isEnd()) {
a.remove();
}
a.remove();
a.reset();
if (a.isEmpty()) {
System.out.println("There is no Node in List");
}
}
}
分享到:
相关推荐
这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。
Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现...
java单向链表代码实现
约瑟夫问题,通过类实现的链表,并加以改进,做成双向链表
操作包括: 1. 在头部添加结点 2. 在尾部添加结点 3. 遍历 4. 逆置 5. 删除
java语言模拟单向链表,JAVA数据结构
java单向链表的实现实例。需要的朋友可以过来参考下,希望对大家有所帮助
04.单向链表以及单向链表的应用.ppt
循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释
附件是Java版逆序单向链表的实现,一个.java 文件,编译后即可运行,文件绿色安全,仅供学习交流使用,欢迎大家下载学习交流! 代码首先定义了一个ListNode类来表示链表中的节点,然后在reverseList方法中实现了...
培训班老师自己写的单向链表,代码非常全,也很好理解,可执行。
主要为大家详细介绍了Java实现单向链表反转,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
一个java实例,用来描述java算法中链表的使用。
这个说起来也简单就是把1-2-3-4-5这样的链表逆序构建或打印出来5-4-3-2-1。比如用后进先出的栈的特性来做:就是按照链表的顺序把数据压入栈中,再打印栈
主要给大家介绍了关于Java实现单向链表基本功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
类似约瑟夫环问题。有一群人组成一个圈。从头开始按照顺时针方向从1开始依次报数。报到到9的人就离开圈子。其左手边的人接着从1开始报数。依此进行,直到剩最后一个人为止。
附件是逆序输出单向链表_Java 版本源码,代码首先定义了一个Node类来表示链表的节点,然后定义了一个LinkedList类来表示单链表,并提供了添加节点、打印链表和逆序链表的方法。最后,在Main类中创建了一个链表实例,...
Amazon 面试题,如何用O(N)实现在链表中找出 是否出现循环(Loop),算法也可以用在其他语言(C,C++等)
里面有注释,很详细。 对于数据结构基础不是很好地朋友来说,有很大的帮助。