добавить узел в круговой связанный список - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь написать общий класс кругового связанного списка. я пытался добавить узлы в круговой связанный список, но добавление узлов не работает должным образом. Порядок добавляемых узлов по какой-то странной причине неправильный.

import java.util.NoSuchElementException;
import linear.Node;

public class CircularLinkedList<T> {

    /**
     * @param args
     */

    private Node<T> rear;
    private static int size;

    public CircularLinkedList() {

        rear = null; 
        size = 0;

    }

    public void add(T data) {

        rear = new Node<T>(data, rear);

        size++;
    }
}

public class Node<T> { //generic node

    public T data;
    public Node<T> next;

    public Node(T data, Node<T> next) {

        this.data = data;
        this.next = next;       
    }

    public String toString() {

             return "" + data; //force concatation data.toString() is automatically called

    }
}   

Ответы [ 2 ]

1 голос
/ 01 марта 2012

По

rear = new Node<T>(data, rear);

вы вставляете узел в начало связанного списка.Задняя часть указывает на первый узел.Ваша проблема в том, что последний узел не указал на первый узел.Я думаю, что лучше использовать 2 указателя, один указывает на начало, а другой - на конец.И затем, каждый раз, когда вы добавляете новый узел, не только позволяйте первому указателю указывать на новый узел, но также и указывайте конечному узлу на новый начальный узел.новый узел в начале списка.Если вы хотите вставить новый узел в конец списка, вы должны сделать это:

private Node<T> head = null;
private Node<T> rear = null;
public void add(T data) {
    Node<T> node = new Node<T>(data,head);
    if(head == null){
        head = node;
        node.setNext(head);
    }
    if(rear != null)
        rear.setNext(node);
    rear = node;
    size++;
}
1 голос
/ 01 марта 2012

21 и 2 - правильный ответ.rear является первым элементом связанного списка, а rear.next является вторым элементом.Поскольку вы добавили 21 последний, это первый элемент, а поскольку вы добавили 2 секунды к последнему, это второй элемент.

Вы ожидали чего-то другого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...