Java 删除双链接列表中的第一个节点

Java 删除双链接列表中的第一个节点,java,data-structures,linked-list,Java,Data Structures,Linked List,以下代码删除双链接列表中的第一个节点 public Node deleteFirst() { Node temp = first; if(first.next==null) last = null; else first.next.previous = null; first = first.next; return temp; } 如果列

以下代码删除双链接列表中的第一个节点

public Node deleteFirst()
    {
        Node temp = first;

        if(first.next==null)
            last = null;
        else
            first.next.previous = null;
            first = first.next;

        return temp;
    }

如果列表只包含1个元素,我们将last的引用设置为null。我的问题是,我们为什么不将first的引用设置为null?这会有什么不同吗?

您缺少括号

此语句在任何情况下都会执行,因为它位于if/else之外

first = first.next;
这不是python


你缺少括号

此语句在任何情况下都会执行,因为它位于if/else之外

first = first.next;
这不是python


除了缺少括号外,这种方法还有几个问题

public Node deleteFirst()
    {
        Node temp = first;

        if (first != null) { // list might be empty
            if(first.next==null) {
                last = null;
                first = null; // you must remove the first element if it's the 
                              // only one, otherwise the next call to deleteFirst
                              // will return the same Node again
            } else {
                first.next.previous = null;
                first = first.next;
            }
        }
        return temp;

    }

除了缺少括号外,这种方法还有几个问题

public Node deleteFirst()
    {
        Node temp = first;

        if (first != null) { // list might be empty
            if(first.next==null) {
                last = null;
                first = null; // you must remove the first element if it's the 
                              // only one, otherwise the next call to deleteFirst
                              // will return the same Node again
            } else {
                first.next.previous = null;
                first = first.next;
            }
        }
        return temp;

    }


我正在使用java的数据结构和算法,书中没有括号。但我想那是因为他们只是在示威。丁新泽的评论。我总是用括号,包括一行。好的,我知道了,很抱歉这个错误。但你们中的一个能告诉我为什么last设置为null而不是first吗?last设置为null是因为若你们从只有一个元素的链表中删除第一个元素,那个么就并没有last和first,所以
null
是,但你们不应该也将first设置为null吗?ERAN发布的答案还表明我正在使用java的数据结构和算法,而书中没有括号。但我想那是因为他们只是在示威。丁新泽的评论。我总是用括号,包括一行。好的,我知道了,很抱歉这个错误。但你们中的一个能告诉我为什么last设置为null而不是first吗?last设置为null是因为若你们从只有一个元素的链表中删除第一个元素,那个么就并没有last和first,所以
null
是,但你们不应该也将first设置为null吗?ERAN发布的答案也表明,如果列表中只有一个元素,那么必须将最后一个和第一个引用都设置为null?我的书只将last设置为null,这就是为什么我感到困惑,因为它对我来说毫无意义。这本书的完整标题和作者是什么?@user2733436如果你不将
first
设置为null,你可以调用
deleteFirst
来获得一个具有无限多个节点的列表,它将始终返回相同的节点。@Greycon它是Robert Lafore(见第227页)编写的Java第二版中的数据结构和算法,现在只需一品脱,明天我们将看到它。我同意@EranSo的观点,所以你建议如果列表中只有一个元素,那么必须将最后一个和第一个引用都设置为null?我的书只将last设置为null,这就是为什么我感到困惑,因为它对我来说毫无意义。这本书的完整标题和作者是什么?@user2733436如果你不将
first
设置为null,你可以调用
deleteFirst
来获得一个具有无限多个节点的列表,它将始终返回相同的节点。@Greycon它是Robert Lafore(见第227页)编写的Java第二版中的数据结构和算法,现在只需一品脱,明天我们将看到它。我同意埃兰的观点