为什么我的方法不应该打印出列表的最后一个元素?
Why is my method printing out the last element of the list when its not supposed to?
使用单向链表,我返回一个集合 c,其中包含仅在集合 A 中找到的元素,而不是在集合 B 中找到的元素。
组 A 包含:30、20、item2、item1、10、26
B 组包含:88、item3、30、item4、26、100
A.complement(B);应该给出 { 20 item2 item1 10 },
的输出
但我得到了 { 20 item2 item1 10 26 } 并且“26”不应该出现在集合中。
把list的图表都画出来了,我也不知道是什么问题。
public boolean otherContain(Object obj) { // returns true if object is
// inside singly linked list
Node cur = head.next;
while (cur != null) {
if (cur.object.equals(obj))
return true;
else
cur = cur.next;
}
return false;
}
public Set complement(Set a) {// return set containing elements only in A
// not shared with B
Set c = new Set();
Node curC = c.head;
Node cur = head.next;
while (cur != null) {
if (a.otherContain(cur.object)) {
cur = cur.next;
} else if (!a.otherContain(cur.object)) {
curC.next = cur;
curC = curC.next;
cur = cur.next;
}
}
return c;
}
***************更新了工作方法************************
public Set complement(Set a) {// return set containing elements only in A
// not shared with B
Set c = new Set();
Node newNode = c.head;
Node cur = head.next;
while (cur != null) {
if (a.otherContain(cur.object)) {
cur = cur.next;
} else if (!a.otherContain(cur.object)) {
newNode.next = new Node(cur.object, newNode.next);
cur = cur.next;
}
}
return c;
}
你的问题是你在输出集中重复使用输入集的节点,所以你添加到输出集的最终节点 - 10 - 仍然指的是输入集的最后一个节点 - 26。你应该为输出集创建新节点。
public Set complement(Set a) {
Set c = new Set();
Node curC = c.head;
Node cur = head.next;
while (cur != null) {
if (!a.otherContain(cur.object)) {
Node newNode = new Node();
newNode.object = cur.object;
newNode.next = null;
curC.next = newNode;
curC = curC.next;
}
cur = cur.next;
}
return c;
}
使用单向链表,我返回一个集合 c,其中包含仅在集合 A 中找到的元素,而不是在集合 B 中找到的元素。
组 A 包含:30、20、item2、item1、10、26
B 组包含:88、item3、30、item4、26、100
A.complement(B);应该给出 { 20 item2 item1 10 },
的输出但我得到了 { 20 item2 item1 10 26 } 并且“26”不应该出现在集合中。 把list的图表都画出来了,我也不知道是什么问题。
public boolean otherContain(Object obj) { // returns true if object is
// inside singly linked list
Node cur = head.next;
while (cur != null) {
if (cur.object.equals(obj))
return true;
else
cur = cur.next;
}
return false;
}
public Set complement(Set a) {// return set containing elements only in A
// not shared with B
Set c = new Set();
Node curC = c.head;
Node cur = head.next;
while (cur != null) {
if (a.otherContain(cur.object)) {
cur = cur.next;
} else if (!a.otherContain(cur.object)) {
curC.next = cur;
curC = curC.next;
cur = cur.next;
}
}
return c;
}
***************更新了工作方法************************
public Set complement(Set a) {// return set containing elements only in A
// not shared with B
Set c = new Set();
Node newNode = c.head;
Node cur = head.next;
while (cur != null) {
if (a.otherContain(cur.object)) {
cur = cur.next;
} else if (!a.otherContain(cur.object)) {
newNode.next = new Node(cur.object, newNode.next);
cur = cur.next;
}
}
return c;
}
你的问题是你在输出集中重复使用输入集的节点,所以你添加到输出集的最终节点 - 10 - 仍然指的是输入集的最后一个节点 - 26。你应该为输出集创建新节点。
public Set complement(Set a) {
Set c = new Set();
Node curC = c.head;
Node cur = head.next;
while (cur != null) {
if (!a.otherContain(cur.object)) {
Node newNode = new Node();
newNode.object = cur.object;
newNode.next = null;
curC.next = newNode;
curC = curC.next;
}
cur = cur.next;
}
return c;
}