为什么我的方法不应该打印出列表的最后一个元素?

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;
}