public void remove(LinkedListNode node) {
    DefeasibleLogicalDependency dep =
        ((LinkedListEntry<DefeasibleLogicalDependency>) node).getObject();

    if (dep.getDefeatedBy() != null) {
      // Defeated deps do not have defeated defeated lists of their own, so just remove.
      DefeasibleLogicalDependency defeater = dep.getDefeatedBy();
      defeater.removeDefeated(dep);
    } else {
      // ins undefeated, process it's defeated list if they exist
      removeUndefeated(dep, (LinkedListEntry<DefeasibleLogicalDependency>) node);
      if (dep.getRootDefeated() != null) {
        reprocessDefeated(dep.getRootDefeated());
      }
    }
    updateStatus();
  }
    public Entry next(Entry object) {
      DefeasibleLogicalDependency dep = (DefeasibleLogicalDependency) object;
      if (dep.getRootDefeated() != null) {
        // try going down the list of defeated first
        return dep.getRootDefeated();
      }

      if (dep.getNext() != null) {
        return dep.getNext();
      }

      if (dep.getDefeatedBy() != null) {
        // go back up to the parent undefeated, and try the next undefeated
        return dep.getDefeatedBy().getNext();
      }

      return null; // nothing more to iterate too.
    }