public class LinkedListNode {//链表节点
public LinkedListNode previous;//前一节点
public LinkedListNode next;//后一节点
public Object object;//节点中存的值
public long timestamp;
public LinkedListNode(Object object, LinkedListNode next, LinkedListNode previous)
{
this.object = object;
this.next = next;
this.previous = previous;
}
public void remove() {//删除自己
previous.next = next;
next.previous = previous;
}
public String toString() {
return object.toString();
}
}
import java.util.*;
public class LinkedList {//循环链表
//头指针,哑的,第一个节点的前面,最后一个节点的后面
private LinkedListNode head = new LinkedListNode("head", null, null);
public LinkedList() {
head.next = head.previous = head;
}
public LinkedListNode getFirst() {//获取循环链表的第一个节点
LinkedListNode node = head.next;
if (node == head) {
return null;
}
return node;
}
public LinkedListNode getLast() {//获取循环链表的最后一个节点
LinkedListNode node = head.previous;
if (node == head) {
return null;
}
return node;
}
public LinkedListNode addFirst(LinkedListNode node) {//将节点插入到链表的第一个位置,头节点之后.
node.next = head.next;
node.previous = head;
node.previous.next = node;
node.next.previous = node;
return node;
}
public LinkedListNode addFirst(Object object) {//将值插入到链表的第一个位置,头节点之后.
LinkedListNode node = new LinkedListNode(object, head.next, head);
node.previous.next = node;
node.next.previous = node;
return node;
}
public LinkedListNode addLast(Object object) {//将值插入到链表的最后一个位置,头节点之前
LinkedListNode node = new LinkedListNode(object, head, head.previous);
node.previous.next = node;
node.next.previous = node;
return node;
}
public void clear() {//清空循环链表
//Remove all references in the list.
LinkedListNode node = getLast();
while (node != null) {
node.remove();
node = getLast();
}
//Re-initialize.
head.next = head.previous = head;
}
public String toString() {
LinkedListNode node = head.next;
StringBuffer buf = new StringBuffer();
while (node != head) {
buf.append(node.toString()).append(", ");
node = node.next;
}
return buf.toString();
}
}
源码:
分享到:
相关推荐
循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释
用Java定义一个循环链表,实现链表的基本操作: 初始化*、获取头结点、添加新元素*、删除链表元素 、获取链表元素*、查找链表元素*、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空...
这个循环链表是基于引用的,现实的算法比较简单,但是可以作为参考之用。
由于在项目中需要用到循环链表,然而在JDK没有其实现,所以用Java语言实现了循环链表,供大家学习和参考。若有任何问题请发送E-Mail:wn_lut@126.com,以交流及改进。 Package:com.utilities.structs 打开方式:...
类似约瑟夫环问题。有一群人组成一个圈。从头开始按照顺时针方向从1开始依次报数。报到到9的人就离开圈子。其左手边的人接着从1开始报数。依此进行,直到剩最后一个人为止。
约瑟夫环,用循环链表实现,语言为Java。假设数到三的数出列。程序输出1到10的出列顺序。
JAVA实现链表_双向链表
使用java语言编译循环双链表,有三个类,分别是一个接口类,一个循环双链表继承接口的实现类,一个循环双链表的测试类
约瑟夫环求解,循环链表的使用,经典问题
循环链表源码,分别用C、C++、JAVA实现,仅供参考
NULL 博文链接:https://bbwang8088.iteye.com/blog/2391835
java双向循环链表实现程序_.docx
介绍了java双向循环链表的实现代码,有需要的朋友可以参考一下
单向循环链表源码,包括List的接口定义的源码,实现了List接口的方法。
java双向循环链表实现程序__1.docx
假设以带头结点的循环链表表示一个队列,并且只设一个队尾指针指向尾元素结点(注意不设头指针),试写出相应的置空队、入队、出队的算法。(Java描述)
用java语言将双向链表和循环链表结合起来,数据结构吧课程设计的题目
用C++和Java实现带头节点的双向循环链表,要继承linearList类,并实现它的所有功能,另外,必须实现双向迭代器。 实现带头节点的双向循环链表,要具有以下的功能: 判断表是否为空,如果为空则返回true,不空返回...