2016-01-28 2 views
2

Использование однократно связанный список, я возвращающая множество С, содержащий элементы только в множестве А, а не в множестве B.Почему мой метод распечатывает последний элемент списка, когда его не предполагается?

множество А содержит: 30, 20, элемент2, элемент1, 10, 26

Комплект В содержит: 88, поз. 3, 30, поз. 4, 26, 100

A.complement (B); должен дать результат {20 item2 item1 10},

, но я получаю {20 item2 item1 10 26} и '26' не должен находиться в комплекте. Я не могу понять, что не так, даже после вычеркивания диаграммы списка.

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

Одиночно связанный набор, это должно быть домашнее задание. Я предлагаю вам использовать ваш отладчик, чтобы помочь вам отладить ваш код. –

ответ

1

Ваша проблема заключается в том, что вы повторно используете Узлы ввода Set в выходном наборе, поэтому конечный узел, который вы добавляете к выходу Set-10, все еще относится к последнему узлу ввода Set - 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; 
} 
+0

Спасибо, после вашего совета, прежде чем вы отправили код, и это сработало! – asdf

+0

@hobbes Хорошо для вас! Всегда лучше писать код самостоятельно. – Eran