如何删除链接列表中的第一个节点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何删除链接列表中的第一个节点?相关的知识,希望对你有一定的参考价值。

Sup人所以我在我的Linked List类中查看了一些我的方法,当从链表中删除一个节点时,我遇到了一个逻辑错误。当我在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();

}

我已经查看了已发布的问题,但我似乎无法找到我正在寻找的答案。 我知道一个节点至少有两个值 一个用于保存数据,另一个用于保存对下一个节点的引用 这就是我认为第一个正在发生的事情。但是当我一个接一个地调用这些方法时,它们都会从最后一个节点上消失。 Idk我会查看我的代码并在必要时更新此问题。但你们能看到我出错的地方,并指出我正确的方向。谢谢。

答案

如果您有一个列表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

另一答案
public void removeFirst() {
        if (head == null)
              return;
        else {
              if (head == tail) {
                    head = null;
                    tail = null;
              } else {
                    head = head.next;
              }
        }
  }
另一答案

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

public void deleteFront()
{
 if (head!=null)
 head = head.Next;
}
另一答案
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;

删除最后一个节点:它看起来很好。

以上是关于如何删除链接列表中的第一个节点?的主要内容,如果未能解决你的问题,请参考以下文章

用另一个列表替换主活动中的列表并从视图中删除旧列表

节点已插入,但输入的第一个节点已从列表中删除

“从链接列表中删除循环”中的运行时错误

c_cpp 编写一个函数以获取链接列表中的第N个节点

如何从片段内的列表视图打开链接网址?

从链接列表中删除节点无法正常工作