将节点添加到循环链表中



我正在尝试编写一个通用的循环链表类。我试图将节点添加到make a circular链表中,但添加节点并没有停止正常工作。。由于某种奇怪的原因,添加的节点顺序不正确。。

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

21和2是正确答案。rear是链表的第一个元素,rear.next是第二个元素。由于您在最后添加了21,这是第一个元素,由于您在末尾添加了2秒,这是第二个元素。

你期待什么不同的东西吗?

通过

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

在链接列表的开头插入一个节点。背面指向第一个节点。您的问题是最后一个节点没有指向第一个节点。我认为最好在这里用2个指针,一个指向开始,另一个指向结束。然后,每次添加新节点时,不仅要让第一个指针指向新节点,还要让结束节点指向新的开始节点。

private Node<T> head = null;
private Node<T> rear = null;
public void add(T data) {
    head = new Node<T>(data, head);
    if(rear == null)
        rear = head;
    rear.setNext(head);
    size++;
}

此解决方案还在列表的开头插入新节点。如果你想在列表的末尾插入新节点,你应该这样做:

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

相关内容

  • 没有找到相关文章

最新更新