Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:单链接列表,实例化了4个唯一的SLLIST,但向一个列表添加值会向所有列表添加相同的值_Java_Singly Linked List - Fatal编程技术网

Java:单链接列表,实例化了4个唯一的SLLIST,但向一个列表添加值会向所有列表添加相同的值

Java:单链接列表,实例化了4个唯一的SLLIST,但向一个列表添加值会向所有列表添加相同的值,java,singly-linked-list,Java,Singly Linked List,我想知道这是否与我如何指定我的单链表类有关,但问题一直没有解决 以下是单链接列表类: class SLList { private static Node head; private static long size; public SLList() { head = new Node(null, null); setSize(0); } static class Node { private Object data; private Node next;

我想知道这是否与我如何指定我的单链表类有关,但问题一直没有解决

以下是单链接列表类:

class SLList {
private static Node head;
private static long size;

public SLList() {
    head = new Node(null, null);
    setSize(0);
}

static class Node {
    private Object data;
    private Node next;

    public Node(Object newData, Node n) {
        data = newData;
        next = n;
    }

    public Node getNext() {
        return next;
    }

    public void setElement(Object element) {
        data = element;
    }

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

    public String toString() {
        String result = data + " ";
        return result;
    }

    public Object getObject() {
        return data;
    }
}

public Node getHead() {
    return head;
}

public long getSize() {
    return size;
}

public void setSize(long size) {
    this.size = size;
}

public void addLast(Object object) {
    Node temp = head;
    while(temp.next != null) {
        temp = temp.next;
    }
    temp.next = new Node(object, null);
    size++;
}

public void remove(Object object) {
    Node pre = head;
    Node temp = head.next;
    while(temp.next != null) {
        pre = temp;
        temp = temp.next;
        if(temp.data.equals(object)) {
            pre = temp.next;
            temp = temp.next.next;
            size--;
        }
    }
}

public void printElements() {
    Node temp = head;
    if(temp.next == null) {
        System.out.println("List is empty.");
    }
    else {
        while(temp.next != null) {

            temp = temp.next;
            System.out.println(temp.data);
        }
    }
}
}
这是一个Set类,它有一个向列表中添加新值的方法,可以排除列表中已有的重复值:

public class Set {
SLinkedList aList;
SLinkedList bList;
SLinkedList cList;
SLinkedList dList;

public Set() {
    aList = new SLinkedList();
    bList = new SLinkedList();
    cList = new SLinkedList();
    dList = new SLinkedList();
}

public SLinkedList getList(char x) {
    if(x == 'a') {
        return aList;
    }
    else if(x == 'b') {
        return bList;
    }
    else if(x == 'c') {
        return cList;
    }
    else {
        return dList;
    }
}

public boolean addElement(SLinkedList list, Object newData) {
    SLinkedList.Node newNode = new SLinkedList.Node(newData, null);
    SLinkedList.Node traverseNode = list.getHead();
    while(traverseNode.getNext() != null) {
        traverseNode = traverseNode.getNext();
        if(traverseNode.getObject().equals(newNode.getObject())) {
            System.out.println("This data is already in the list.");
            return false;
        }
    }
    list.addLast(newData);
    System.out.println("Node added!");

    return true;
}

public void fillList() {
    aList.addLast("dog");
    aList.addLast(4);
    bList.addLast("test");
    System.out.println("aList: ");
    aList.printElements();
    System.out.println("bList: ");
    bList.printElements();
}

}
这是我尝试使用fillList向第一个单链接列表(aList)添加值时的输出

如您所见,将值添加到列表会将相同的值添加到bList。任何帮助都将不胜感激

这是:

private static Node head;
意味着您的所有SLLIst实例都有一个头。因此,所有SLList实例共享相同的头

这应该是您的类的一个成员,因此每个SLLIst实例将有一个head实例

e、 g

这同样适用于您的大小字段。我认为您不需要任何静态成员

private static Node head;
private Node head;