我想用Java做一个circular LinkedList
。我有一个多边形,其中包含一个点列表。list
必须是循环的。
我想创建循环列表:CircularList extends LinkedList
但我不知道如何继续。
谢谢你的帮助。
LinkedList
对列表中的第一个和最后一个节点有 2 个引用。
从LinkedList
源代码:
/**
* Pointer to first node.
* Invariant: (first == null && last == null) ||
* (first.prev == null && first.item != null)
*/
transient Node<E> first;
/**
* Pointer to last node.
* Invariant: (first == null && last == null) ||
* (last.next == null && last.item != null)
*/
transient Node<E> last;
如您所见,第一个节点的"prev"成员设置为 null,最后一个节点的"下一个"成员设置为 null。 设置 first.prev= last 和 last.next=prev 将创建一个循环列表,但是(在这里小心)您必须覆盖 linkedlist 中的大多数插入、链接和删除操作以适应此更改。您可能还需要为迭代器编写一些代码。 这并非易事,因为您需要在迭代列表时跟踪停止的位置,否则您可能会陷入无限循环。 希望我说清楚了,答案有所帮助。 问候
这是您的快速解决方案。
检查以下代码以在 Java 中进行circular LinkedList
。
public static void main(String arg[]) {
CircularLinkedList cl = new CircularLinkedList();
cl.add(1);
cl.add(2);
cl.add(3);
cl.add(4);
cl.display();
}
public class Node{
int data;
Node next;
public Node(int data) {
this.data = data;
}
}
public Node head = null;
public Node tail = null;
public void add(int data){
Node newNode = new Node(data);
if(head == null) {
head = newNode;
tail = newNode;
newNode.next = head;
}
else {
tail.next = newNode;
tail = newNode;
tail.next = head;
}
}
public void display() {
Node current = head;
if(head == null) {
System.out.println("List is empty");
}
else {
System.out.println("Nodes of the circular linked list: ");
do{
System.out.print(" "+ current.data);
current = current.next;
}while(current != head);
System.out.println();
}
}
希望这个例子能帮助你理解circular LinkedList
的概念。
我有一个多边形,它由点列表组成。我有类点,多边形和列表循环。 这是我生气了:
import java.util.LinkedList;
public class ListCircPoly <Point> extends LinkedList {
private Node node;
private Node last;
private int size;
public ListCircPoly()
{
super();
node=null;//Création d'une chaine vide
last=null;
size=0;
}
/**
* @pre /
* @post ajoute une valeur en fin de list
* @param s valeur à stocker
* @return
*/
@Override
public boolean add(Object s)
{
if (size==0)//Si la chaine est vide
{
this.node= new Node(s);
this.node.next=this.node;
last=node;
size=1;
}
else
{
Node addNode= new Node(s);
addNode.next=last.next;
last.next=addNode;
last=addNode;
size++;
}
return true;
}
public void print()
{
if (size>0)
{
System.out.println(this.node.data);
Node currentNode=this.node.next;
while (currentNode!=this.node)
{
System.out.println(currentNode.data);
currentNode=currentNode.next;
}
}
else System.out.println("Lise vide");
}
private class Node
{
private Object data;
private Node next;
public Node(Object data)
{
this.data=data;
this.next=null;
}
}
}
我想像链接列表一样使用它,但我的类多边形有问题。