Java 什么是';头部';链接列表的名称?

Java 什么是';头部';链接列表的名称?,java,data-structures,linked-list,Java,Data Structures,Linked List,我在Java中研究链表,所以我试图掌握单个链表的概念 head->12->34->56->null 头。下一个将是12(也与节点1相同)。然而,什么是头呢 更新:引用和指针之间有什么区别 Update2:因此,如果head是12和head.next是34,那么这并不意味着下面的函数跳过第一个节点以查看它是否为空 public void add(Object data, int index) // post: inserts the specified element at the spe

我在Java中研究链表,所以我试图掌握单个链表的概念

head->12->34->56->null

头。下一个
将是12(也与节点1相同)。然而,什么是头呢

更新:引用和指针之间有什么区别

Update2:因此,如果
head
12
head.next
34
,那么这并不意味着下面的函数跳过第一个节点以查看它是否为空

public void add(Object data, int index)
    // post: inserts the specified element at the specified position in this list.
    {
        Node temp = new Node(data);
        Node current = head;
        // crawl to the requested index or the last element in the list,
        // whichever comes first
        for(int i = 1; i < index && current.getNext() != null; i++)
        {
            current = current.getNext();
        }
        // set the new node's next-node reference to this node's next-node reference
        temp.setNext(current.getNext());
        // now set this node's next-node reference to the new node
        current.setNext(temp);
        listCount++;// increment the number of elements variable
    }
public void添加(对象数据,int索引)
//post:在此列表中的指定位置插入指定元素。
{
节点温度=新节点(数据);
节点电流=头;
//爬网到请求的索引或列表中的最后一个元素,
//以先到者为准
对于(int i=1;i

来源:

是的,它只是指向第一个节点的指针

列表的头部指的是列表的第一个节点。它将为存储该节点引用的变量起一个很好的名字,如果列表为空,我希望它包含null引用

someLinkedList.head
         |
         |
         v
        ______        ______        ______            
       |    |n|      |    |n|      |    |n|           
       |    |e|      |    |e|      |    |e|           
       | 12 |x| -->  | 34 |x| -->  | 56 |x| --> null
       |    |t|      |    |t|      |    |t|           
       |____|_|      |____|_|      |____|_|           
根据上下文,尾部可以指不同的事物。我使用的术语是,在本例中,尾部对应于
34->56->null
,即头部后面的列表

在其他上下文中,它可能是对最后一个节点的引用。在这种解释中,尾部将引用示例中的
56
节点


关于您的第一次编辑,这恰好是一个完全不同的问题:

指针是与内存地址相对应的值。引用是指某个对象(或null)的值。您不能在Java引用上执行指针算术,但在其他方面,我会说它们非常相似

可能让您感到困惑的是,Java中的变量永远不能包含对象。对象始终位于堆上,变量包含基本数据类型或对堆上对象的引用


关于您的第二次编辑:

在您提供的示例中,add方法似乎跳过了第一个元素,从某种意义上说确实如此。这是因为实现有一个“虚拟”元素作为头部。查看构造函数中head变量的初始化:

head = new Node(null);

我不明白他们为什么决定这么做。对我来说,这看起来很愚蠢。

术语“头”有两个完全无关的含义。最常见的(我相信是由Lisp产生的)是“列表的第一个元素”。从您的图表判断,这不是您心目中的含义

第二种含义是指处理以下问题的技术:如果将链表表示为仅包含数据的节点,那么当该列表为空时,对该列表的所有引用(和/或指针,取决于语言)都必须为空,因为没有指向的对象。这会给使用该列表的代码带来很多簿记问题。列表头解决了这个问题。它是一个不包含实际数据的列表节点。指向列表的引用或指针始终是指向头部节点的指针。列表的第一个元素总是
头。下一个
。通常,head的存在隐藏在实现“带有head的链表”的类中

根据所支持的操作,列表末尾可能存在类似的簿记问题,特别是对于双链接列表。列表尾部节点简化了簿记


这些节点在文献(包括)中也被称为“哨兵节点”。

在其他任何事情之前,应该注意的是,头部不是一个单独的节点,只是对第一个节点的引用。它通过存储指向第一个节点的指针来保存整个列表

另一个值得注意的区别是head是一个普通的本地指针变量,它存储在堆栈中,而list节点存储在heap中。
因此,在大多数行话中,Head只是一个本地指针,它保持对链表第一个元素的引用,并且大多数情况下用NULL初始化,以区分空链表。

现在尝试断章取义地阅读问题。这没有任何意义:)一点背景可能会有帮助…@olicharlesworth不该投下的一票。术语“点”不在C的意义上使用。它回答了一个模糊的问题(尽管这可能是一个无用的答案)@Bohzo:我认为这个答案没有任何价值(它只是基于零信息的猜测,使用了不正确的术语);即使这个问题没有上下文,但这个问题是关于一个链表的,是的,Java确实有“指针”,你只是不能真正控制它们。@Tbone:有一个更合适的术语,那就是“引用”!对不起,你是对的,我的第一语言是C++,所以当我看到一个引用时,我会想到一个指针:),那么,Head。NeXT会给出12,而Head .NeX.NeXT会给出34,正确吗?那么什么是头(你说是空的?)?尾部始终指向指向“null”正确的节点?否,
头部将指向
12
-节点<代码>标题。下一个
将是
34
(您已经遵循了一个
next
reference!)。请记住,
head
不是一个对象,它是一个参考。那么我关于尾部的问题呢?另外,我有点困惑,我会更新我的问题。更新答案。现在,如果您有任何后续问题,请创建一个新问题