Как сделать круговой список в Java - PullRequest
0 голосов
/ 22 октября 2019

Я хочу сделать circular LinkedList на Java. У меня есть многоугольник, который содержит список точек. list должно быть круглым.

Я думал создать круговой список: CircularList extends LinkedList, но я не знаю, как мне продолжить.

Спасибо за вашу помощь.

Ответы [ 3 ]

4 голосов
/ 22 октября 2019

Вот быстрое решение для вас.

Проверьте следующий код, чтобы сделать circular LinkedList в Java.

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.

2 голосов
/ 22 октября 2019

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" член, установленный в нуль, и последний узел имеет "следующий" член, установленный в нульУстановка first.prev = last и last.next = prev сделает круговой список, НО (осторожно здесь) вам придется переопределить большинство операций вставки, связывания и удаления в связанных списках, чтобы учесть это изменение. Возможно, вам также понадобится написать код для итератора. Это не тривиально, потому что вам нужно отслеживать, где остановиться при итерации списка, или вы можете попасть в бесконечный цикл. Надеюсь, я дал понять, и ответ поможет. Привет

0 голосов
/ 22 октября 2019

У меня есть многоугольник, который составляет список точек. У меня есть класс Point, Polygon и ListCircular. Это то, что я сделал:

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;
        }
    }
 }

Я хочу использовать его как связанный список, но у меня есть проблемы в моем классе Polygon.

...