0

您好,我正在实现一个单链表,而不使用库。我遇到了在列表末尾添加元素的问题。谁能帮助我。这是我的代码:

public class SinglyLinkedList<T> implements GenericLinkedList<T> {
        private Node<T> head;
        private Node<T> tail;
        private int size;

        public SinglyLinkedList() {
            head = null;
            tail = null;
            size = 0;
                }
            public void addLast(T elem) {
            tail.next.element  = elem;
            size++;
        }

**public void addLast(T elem) {
            Node<T> newNode = new Node<T>();
            tail.next = null;
            newNode.element = elem;

        **
4

2 回答 2

2

您指定尾部的下一个元素,但您还应该考虑插入的元素本身成为新的尾部。简而言之:

  1. 创建一个新节点。
  2. 将元素存储在其上。
  3. 使尾部指向该节点。(当前的尾部变成了nth - 1元素)。
  4. 使新插入的元素成为您的新尾巴。
  5. 增加列表的大小。

您当前的问题也与第 1 步和第 3 步有关。您没有定义Node要存储的对象,tail.next如果它确实是列表的尾部,则应该为 null。

于 2013-11-13T17:54:53.113 回答
1

这是单链表的完整代码。
单链表

public class SinglyLinkedList<T> {
    private Node<T> head;
    private Node<T> tail;
    private Node<T> temp;
    private int size;

    public SinglyLinkedList() {
        head = null;
        tail = null;
        size = 0;
    }

    public void addLast(T elem) {
        if(head == null){
            head = new Node<T>();
            head.element = elem;
            tail = head;
            size++;
        } else  {
            temp = new Node<T>();
            temp.element = elem;
            tail.next = temp;
            temp.prev = tail;
            tail = temp;
            size++;
        }  

    }
    void print(){
        temp = head;
        while(temp  != null){
            System.out.println(temp.element);
            temp = temp.next;
        }
    }
    public static void main(String[] args) {
        SinglyLinkedList<Integer> list = new SinglyLinkedList<>();
        list.addLast(1);
        list.addLast(2);
        list.addLast(3);
        list.addLast(4);
        list.addLast(5);
        list.addLast(6);
        list.print();

    }
}

节点

public class Node<T>{
    Node<T> prev;
    Node<T> next;
    T element;
    public Node() {
    }
}
于 2013-11-13T18:37:25.030 回答