我正在尝试编写一个包含通常的Node内部类和实例变量的java类CircularList:
答案 0 :(得分:2)
好的,我不会给你全部的课程实施,但我会给你一些建议。
除了循环列表没有结束这一事实外,它们与常规列表完全相同,但是你找到最后一项如下:
节点tmp = first;
while(tmp.Next!= null) tmp = tmp.Next;
在循环列表中,这个想法是这样的:
Node tmp = first;
while ( tmp.Next != first )
tmp = tmp.Next;
因为除非列表为空,否则永远不会找到指向null的节点。最后一条建议,如果你需要实现一个索引器,请记住在循环列表中没有索引超出范围的事情,因为
list[count] = list[0] = list[count * k]
请记住这一点,因此计算这些方法的索引可能非常棘手。对于正面指数,主要思想是:
index = index % count;
对于消极的,略有不同。我希望我能帮助你。如果你想要一个实现,我相信如果你礼貌地问谷歌应该有一些:)
祝你好运!
答案 1 :(得分:2)
我不确定你的问题是什么,你似乎已经拥有了所需的一切。该链表与普通链表之间的唯一区别是添加到结尾。
在常规链接列表中,您将创建一个新节点,并使最后一个元素指向该节点。在这种情况下,您将•Last节点中的指针更改为指向新节点,并使新节点指向•First。
删除与普通链表的工作方式相同。每当你想要移除一个节点时,你会发现哪个节点指向那个节点(前一个节点,或者在删除第一个节点的情况下,检查•最后一个节点)并指向要删除的节点指向的任何地方。
如果这不能解决您的问题,请通知我,我会尽力帮助您。
注意到有人已经问过完全相同的问题: Can I use java.util.LinkedList to construct a circular/cyclic linked list?
答案 2 :(得分:0)
提示......循环列表应该包含next和previous,而不是first和last。逻辑很重要
答案 3 :(得分:0)
class Node {
int value;
Node next;
Node prev;
Node(int initialValue) {
value = initialValue;
next = null;
prev = null;
}
public int getValue() {
return this.value;
}
}
class NodeList {
Node pointer;
NodeList() {
pointer = null;
}
public void insertNode(int nodeValue) {
Node newNode = new Node(nodeValue);
if( pointer == null ) {
newNode.next = newNode;
newNode.prev = newNode;
}else if( pointer.next == null && pointer.prev == null && pointer != null ) {
newNode.next = pointer;
newNode.prev = pointer;
pointer.prev = newNode;
pointer.next = newNode;
}
else if( pointer != null ) {
newNode.next = pointer.next;
newNode.prev = pointer;
pointer.next.prev = newNode;
pointer.next = newNode;
}
pointer = newNode;
System.out.println(“Successfully inserted : ” + pointer.getValue());
}
public void printRing( boolean direction ) {
Node tempNode = pointer;
do {
System.out.println( “Value = ” + tempNode.getValue() );
tempNode = direction ? tempNode.next : tempNode.prev;
} while( tempNode.value != pointer.value );
}
}