我不理解链表数据结构中第一个节点的本质,也就是所谓的头节点。链表由节点组成,每个节点包含一些数据和指向列表中另一个节点的链接。但是,第一个节点是否是一个包含数据和指向第二个节点的链接的节点?还是只包含到另一个节点的链接(没有数据)的节点?我认为,链表中的第一个节点既包含数据又包含指向另一个节点的链接,但在一本入门书中,它被解释为头是一个节点,但是链接可以让您到达第一个节点。同时,头是节点类型的变量。为什么会是这样呢?(如果这有影响,我正在使用Java)。谢谢。
我不理解链表数据结构中第一个节点的本质,也就是所谓的头节点。链表由节点组成,每个节点包含一些数据和指向列表中另一个节点的链接。但是,第一个节点是否是一个包含数据和指向第二个节点的链接的节点?还是只包含到另一个节点的链接(没有数据)的节点?我认为,链表中的第一个节点既包含数据又包含指向另一个节点的链接,但在一本入门书中,它被解释为头是一个节点,但是链接可以让您到达第一个节点。同时,头是节点类型的变量。为什么会是这样呢?(如果这有影响,我正在使用Java)。谢谢。
Node
,则需要两种情况。如果head
为空,表示列表为空,则将head
设置为新的Node
。如果head
不为空,则跟随next
指针直到最后一个Node
,并将next
指针设置为新的Node
。head
永远不会为空。它将是一个带有空next
指针的Node
,您可以将其指向您的新Node
,就像列表包含节点时一样。@falmarri回答说,您可以以任何一种方式实现它。头结点类似于单向链表中的任何其他节点。它只是一个起始节点,我们可以使用它来遍历其余的链表。我们可以将头部实现为节点或指针。
可以将Node看作是一个对象,它有一个变量"data"来保存值,另一个变量"next"指向另一个Node对象以建立链接。请参见下面的Java类。
public class ListNode {
private int data;
private ListNode next = null;
public ListNode() {
// TODO Auto-generated constructor stub
}
//constructor for creating a listNode
public ListNode(int data){
this.data = data;
}
/*below are setters and getters */
public void setData(int data){
this.data = data;
}
public int getData(){
return this.data;
}
public void setNext(ListNode next){
this.next = next;
}
public ListNode getNext(){
return this.next;
}
}
这就是我如何链接它。
//create 3 list node objects
ListNode one = new ListNode(1);
ListNode two = new ListNode(2);
ListNode three = new ListNode(3);
one.setNext(two);
two.setNext(three);
请注意,我们需要知道头节点以进行进一步的操作,例如在列表末尾、开头或随机位置添加ListNode。
在我们的情况下,头节点是链表起始的节点之一。
希望这能解释清楚:)
谢谢 Punith
你可以用任何一种方式来实现它。但只有一个没有数据,只有链接的第一个节点会是一种非常奇怪的实现方式。
头结点通常与其他节点一样,只是逻辑上位于列表的开头,并且没有其他节点指向它(除非您有一个双向链表)。
由于没有其他节点指向它,而且您还需要一种简单的方法来找到列表的开头,因此通常会存储指向头结点的节点的单独指针。这个指针不是节点本身,只是指向一个节点的指针。
ListNode one = new ListNode(1);
中的数字1
或者ListNode two = new ListNode(2);
中的数字2
括号里代表什么?它有什么作用? - Sam