【问题标题】:Singly Linked list remove bool method单链表删除 bool 方法
【发布时间】:2012-09-11 06:51:32
【问题描述】:

我正在尝试创建一个公共 bool remove(E element) 方法,该方法删除包含该元素的第一个节点,如果没有找到这样的节点,则返回 false,否则返回 true...我该怎么做?我无法将已删除节点的前任链接到其后继节点以缩小由节点删除造成的差距...这是我目前的代码...谢谢

public class SinglyLinkedList<E> {
private final SLNode<E> head;
private final SLNode<E> tail;
int length;

// creates an empty list
public SinglyLinkedList() {
    head = new SLNode<E>();
    tail = new SLNode<E>();
    head.setSuccessor(tail);
    length = 0;
}

// adds new node on beginning of the list
public void add(E element) {
    SLNode<E> node = new SLNode<E>(element, null);
    node.setSuccessor(head.getSuccessor());
    head.setSuccessor(node);
}

// adds new node on beginning of the list
public void add(SLNode<E> node) {
    node.setSuccessor(head.getSuccessor());
    head.setSuccessor(node);
}

@Override
public String toString() {
    StringBuilder sb = new StringBuilder();
    SLNode<E> cursor = head.getSuccessor();
    while (cursor != tail) {
        sb.append(cursor.getElement()).append(" ");
        cursor = cursor.getSuccessor();
    }
    sb.append("\n");
    return sb.toString();
}
 }

slnode类

public class SLNode<E> {
private E element;
private SLNode<E> successor;

public SLNode() {
    element = null;
    successor = null;
}

public SLNode(E theElement, SLNode<E> theSuccessor) {
    element = theElement;
    successor = theSuccessor;
}

public E getElement() {
    return element;
}

public void setElement(E newElement) {
    element = newElement;
}

public SLNode<E> getSuccessor() {
    return successor;
}

public void setSuccessor(SLNode<E> newSuccessor) {
    successor = newSuccessor;
}
  }

【问题讨论】:

  • *咳咳*:你试过什么?

标签: java list boolean addremoveprograms


【解决方案1】:

诀窍是当你迭代时,你需要保持对前一个元素和当前元素的引用。对前一个元素的引用可以让您缩小差距:

public boolean remove(E element) {
    SLNode<E> previous = head;
    SLNode<E> current = head.getSuccessor();

    while (current != tail) {
        if (current.getElement().equals(element)) {
            previous.setSuccessor(current.getSuccessor());

            return true;
        }

        previous = current;
        current = current.getSuccessor();
    }

    return false;
}

【讨论】:

  • 这是我无法理解的地方... SLNode previous = head; SLNode current = head.getSuccessor();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多