一、链表的节点类
package com.cache;
public class LinkedListNode {
public LinkedListNode previous;//前一节点
public LinkedListNode next;//后一节点
public Object object;//节点中的数据
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();
}
}
二、链表类
package com.cache;
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();
}
}
http://www.java3z.com/cwbwebhome/article/article5/5555.html?id=816
分享到:
相关推荐
循环链表是一种常见的数据结构,在计算机科学中广泛使用,它允许在链表的末端继续添加新的元素,从而形成一个环状结构。在这种数据结构中,最后一个节点的下一个节点不是空,而是指向第一个节点。 从提供的部分描述...
循环双链表是一种数据结构,它在单链表的基础上增加了前后指针,使得链表的首尾相连,形成一个环状。在Java编程中,我们可以使用面向对象的设计思想来实现循环双链表。通常,这样的数据结构会包含三个主要部分:一个...
循环链表是一种特殊的数据结构,它是链表的一种变体,其中最后一个元素的指针指向第一个元素,形成一个逻辑上的环状结构。这种设计使得在链表的末尾进行操作时,可以通过循环移动指针到达链表的开头,而无需额外的...
这个链表可能是一个环状链表,也可能存在节点不在链表内的异常情况。针对这种情况,我们需要设计一个算法来找到头节点,并在遇到异常时输出相应的错误信息。 首先,我们定义一个`Node`类来表示链表中的节点: ```...
循环链表是一种特殊的链表,它的最后一个节点的next指针指向链表的第一个节点,形成一个闭合的环状结构。下面详细讲解如何实现这个解决方案。 首先,我们需要定义一个链表节点类`LinkNode`,包含两个成员变量:`...
与普通链表不同,单循环链表的最后一个节点指向第一个节点,形成一个环状结构,使得遍历更加灵活。在Java编程语言中,我们可以使用类来表示链表节点,每个节点包含数据和指向下一个节点的引用。 约瑟夫问题,又称为...
在Java编程中,链表是一种常见的数据结构...以上代码示例展示了如何在Java中寻找具有特定结构的链表头节点,同时考虑了环状链表和节点不存在的异常情况。通过构建辅助数据结构并遍历链表,我们能够有效地处理这些问题。
3. 检查环状链表:为了检查链表是否环状,可以使用Floyd判圈算法,也称作龟兔赛跑算法。设置两个指针,一个快指针每次移动两步,一个慢指针每次移动一步。如果链表有环,快指针最终会追上慢指针。如果两个指针相遇,...
这个链表的特点在于,它的首节点和尾节点相互连接,形成一个环状结构。在本例中,我们有两个关键文件:`LinkedTest.java`和`LinkedNode.java`,它们分别代表链表的测试类和节点类。 **LinkedNode.java**: 这个文件...
单向链表只能按一个方向遍历,双向链表可以从两个方向遍历,循环链表的最后一个节点指向第一个节点,形成环状。 2. **链表的常见操作** - 插入:在链表头部、尾部或指定位置插入新节点。 - 删除:根据节点值或...
为了找到头节点,我们需要考虑链表可能存在的特殊情况,例如环状链表和不存在的节点。 首先,我们需要定义链表节点类,如下所示: ```java public class ListNode { int id; int nextId; public ListNode(int ...
在这个压缩包文件“单向循环链表.zip”中,包含了两个源代码文件——LoopSingle.java和List.java,它们分别对应了单向循环链表的节点类和接口定义。 首先,我们来看`LoopSingle.java`,这个文件通常会包含一个名为`...