Круговой двусвязный список, почему я застрял в oop? - PullRequest
1 голос
/ 21 апреля 2020
public class LinkedList<E> {
    private Node<E> head;
    private Node<E> tail;

    /* Inserts*/
    public void insertAtHead(E data)
    {
        Node<E> newNode=new Node<E>(data);
        if(this.head==null)
        {
            this.head=newNode;
            //newNode.nextNode=this.head; <--- Here is error cause
            this.tail=this.head;
        }
        else {
            newNode.prevNode = this.tail;
            this.head.prevNode = newNode;
            newNode.nextNode = this.head;
            this.head = newNode;
            System.out.println("tail.next is: " + this.tail.nextNode);
        }
    }

Насколько я понимаю, я должен указывать хвост списка на головной узел при реализации циклически связанного списка. Это реализация двойного кругового связанного списка, который у меня есть, и закомментированная строка - это то, что я не понимаю, почему вызывает ошибку. Кажется, что хвост либо нулевой, либо застрял в бесконечном l oop, может кто-нибудь помочь мне понять, пожалуйста? спасибо

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Ошибка была с моей модификацией длины и методов toString, спасибо за помощь.

0 голосов
/ 21 апреля 2020
public void insertAtHead(E data)
    {
        Node<E> newNode=new Node<E>(data);
        if(this.head==null)
        {
            this.head=newNode;
            newNode.nextNode=this.head; // this should NOT be the bug place
            newNode.prevNode=this.head; // add this
            this.tail=this.head;
        }
        else {
            newNode.prevNode = this.tail;
            this.head.prevNode = newNode;
            newNode.nextNode = this.head;
            this.head = newNode;
            tail.nextNode = this.head // add this
            System.out.println("tail.next is: " + this.tail.nextNode);
        }
    }
...