链接列表错误的输出Java

时间:2015-02-28 22:48:24

标签: java linked-list singly-linked-list

嘿呀,我的单链表有点麻烦。我决定创建一个简单的,因为我们在数据结构类中没有得到足够的练习,似乎无法找到为什么我没有得到正确的输出。

代码是:

package linked_list;

public class LinkedList {

    private Node head;
    private Node tail;   // After figuring out head, come back to this FIXME
    private int listSize;

    public LinkedList() {
        head = new Node(null);
        tail = new Node(null);
    }

    public void addLast(String s) {
        Node newNode = new Node(s);
        if (head == null) {
            addFirst(s);
        } else {
            while (head.next != null) {
                head = head.next;
            }
            head.next = newNode;
            tail = newNode;
        }
        listSize++;
    }

    public void addFirst(String s) {
        Node newNode = new Node(s);
        if (head == null) {
            head = newNode;
            tail = newNode;
        }
        else {
            newNode.next = head;
            head = newNode;
        }
        listSize++;
    }

    public Object getFirst() {
        return head.data;
    }

    public Object getLast() {
        return tail.data;
    }

    public void clear() {
        head = null;
        tail = null;
        listSize = 0;
    }

    public Object peek() {
        try {
            if (head == null) {
                throw new Exception ("The value is null");
            }
            else {
                return head;
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }
    }

    public int size() {
        return listSize;
    }

    // This class has the ability to create the nodes that are used
    // in the Linked List.

    private class Node {
        Node next;
        Object data;

        public Node(String value) {
            next = null;
            data = value;
        }

        public Node(Object value, Node nextValue) {
            next = nextValue;
            data = value;
        }

        public Object getData() {
            return data;
        }

        public void setData(Object dataValue) {
            data = dataValue;
        }

        public Node getNext() {
            return next;
        }

        public void setNext(Node nextValue) {
            next = nextValue;
        }
    }
}

现在这是我创建的驱动程序,用于运行一个简单的小操作:

package linked_list;

public class LinkedListDriver {

    public static void main(String[] args) {

        LinkedList list1 = new LinkedList();

        list1.clear();

        list1.addLast("This goes last");
        list1.addFirst("This goes first");
        list1.addLast("Now this one goes last");

        System.out.println(list1.getFirst());
        System.out.println(list1.getLast());
    }

}

我的输出是:

This goes last
Now this one goes last

我想我的问题是为什么我的This goes first方法无法得到答案getFirst()。这个方法的顺序或结构似乎有些不对劲,但我无法确定它。

1 个答案:

答案 0 :(得分:3)

当您在addLast中的else中时,您正在将引用更改为head。在else中添加时,您应该使用另一个引用指针来遍历列表。

此外,您的列表大小应仅在addLast中的else中递增,因为否则会递增两次(一次在addFirst中,一次在addLast中的if-else之后)。