首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于addHead方法,为什么要检查尾==是否为空?

对于addHead方法,为什么要检查尾==是否为空?
EN

Stack Overflow用户
提问于 2019-07-20 01:35:05
回答 2查看 692关注 0票数 0

我正在选修Java数据结构课程,目前正在学习单链接列表。在addHead的方法中,为什么我们需要检查尾==是否为空?如果是真的,为什么尾巴=头?

代码语言:javascript
复制
public void addHead(T d){
  Node<T> n = new Node<>(d, head);
  head = n;
  size++
  if(tail == null)
   tail = head;
}

完整代码在这里:https://venus.cs.qc.cuny.edu/~ryba/cs313/linkedList/LinkedList.java

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-20 02:12:24

head中是对列表中第一个节点的引用。

tail中是对列表中最后一个节点的引用。

( tail引用用于允许在固定时间内将元素添加到列表的末尾。)

空列表包含head == nulltail == null

包含一个元素的列表包含head == tailhead != nulltail != null

具有多个元素的列表具有head != tailhead != nulltail != null

addHead为新元素d创建一个新的节点n,并引用存储在head中的列表中的下一个节点(对于第一个元素为null )。head被分配给新创建的节点n的引用。

当向列表中添加第一个元素时,if(tail == null)是真的。对n的引用已经保存在head中,并且还需要用tail = head; (也可能:tail = n;)保存在tail中,以满足head == tail条件。

当向列表的head (addHead)添加其他元素时,tail不会更改,但是应该继续指向列表的最后一个节点。

票数 1
EN

Stack Overflow用户

发布于 2019-07-20 01:55:25

您的列表实现还允许追加到末尾。

为了有效地工作,列表维护一个指向其最后一个元素的tail指针。在没有指针的情况下可以这样做,但是每次都需要遍历整个列表来查找最后一个元素,将O(N)替换为O(1)。出于同样的原因,您的实现也有一个size计数器。

向以前空的列表中添加一个新元素时,需要调整tail指针,使其指向新创建的单个节点。

请注意,当添加到列表的前面时,您只需在列表之前为空时调整tail。在所有其他情况下,tail保持在原来的位置,只有headsize发生变化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57121143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档