1

伙计们,所以我将在我的链接列表类中讨论我的一些方法,并且在从链接列表中删除节点时出现逻辑错误。当我在 removeLast() 方法中也遇到错误时,我正在处理我的 removeFirst() 方法。问题是两者都删除了列表中的最后一项。不知道为什么,但这是我的代码。

删除第一个节点

public T removeFirst() throws EmptyCollectionException
{
 // Checking to see if the List is empty or not
    if ( isEmpty() )
        throw new EmptyCollectionException("LinkedList");

    Node < T > temp  = contents;

    T  next = contents.getNext().getItem();

    contents = new Node ( next, contents );
    count--;

    return temp.getItem();
}



删除最后一个节点

public T removeLast() // fixed
{
 // Checking to see if the List is empty or not
    if (isEmpty())
        throw new EmptyCollectionException("LinkedList");

    // Node<T> temp = contents;
    Node<T> current = contents;  
    Node<T> prev = null;        

    while (current.getNext() != null) 
    {
        prev = current; 
        current = current.getNext();
    } 

    prev.setNext(null); 

    count--;

    return current.getItem();

}

我已经查看了已经发布的问题,但似乎找不到我正在寻找的答案。
我知道一个节点至少有两个值
,一个用来保存数据,另一个用来保存对下一个节点的引用。

这就是我认为第一个节点的情况。但是当我一个接一个地调用这些方法时,它们都摆脱了最后一个节点。我会查看我的代码并在必要时更新这个问题。但是你们能看到我哪里出错并指出我正确的方向吗?谢谢你。

4

4 回答 4

2

如果您有一个列表 A->B->C,A 是列表的头部(“内容”),为了删除它,您只需将指针前进到 B,即列表中的下一个节点:

public T removeFirst() throws EmptyCollectionException {
    // Checking to see if the List is empty or not
    if ( isEmpty() )
        throw new EmptyCollectionException("LinkedList");

    Node<T> first = contents;

    contents = contents.getNext();
    count--;

    return first.getItem();
}

由于您还需要返回与第一个节点关联的数据,因此您需要保留对它的临时引用。(我叫它first

于 2013-05-12T12:27:19.257 回答
2
public void removeFirst() {
        if (head == null)
              return;
        else {
              if (head == tail) {
                    head = null;
                    tail = null;
              } else {
                    head = head.next;
              }
        }
  }
于 2013-05-12T13:56:17.727 回答
0

我认为您需要将头节点添加到链表类中以定义列表的第一个节点。

public void deleteFront()
{
   if (head!=null){
   head = head.next;
   }
}
于 2013-05-12T12:28:14.110 回答
0
public T removeFirst() throws EmptyCollectionException {
 if (isEmpty())
    throw new EmptyCollectionException("LinkedList");

Node < T > temp  = contents;

T  next = contents.getNext().getItem();

contents = new Node ( next, contents );
count--;



  return temp.getItem();
}

在此方法中注释最后三个语句。然后添加以下三行

contents=contents.getNext()
count--;
return next;

删除最后一个节点:对我来说它看起来不错。

于 2013-05-12T15:55:57.997 回答