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;