【问题标题】:How to determine the direction of a Linked List如何确定链表的方向
【发布时间】:2014-09-21 18:43:02
【问题描述】:

我必须创建一个将自身添加到左侧的链表,所以我认为它是这样的,其中框是节点,箭头是链接:

tail [] <- [] <- [] <- ... [] head

但是在添加第二个节点时如何确定链表的方向呢? 你怎么知道它会放在哪一边?

2nd?  1st  2nd?
 []   []   []

例如这段代码:head = new IntNode(5,head)
如果链表是这样的,将添加到右侧:

         head         tail
    [] -> [] -> [] -> []

但这只是在添加到具有该格式的已创建列表时,那么创建新链表时将从哪一侧开始?

【问题讨论】:

  • 这有点像询问家谱是向下还是向上。传统上它是在父母之上绘制的,但不一定是这样:只要结构相同,就可以随意绘制。我想,链表通常是左头右尾绘制的。但这只是因为大多数语言都是从左到右阅读的。它不是链表的内在属性。

标签: java linked-list singly-linked-list


【解决方案1】:

嗯,没有leftright 带有链表。

该方向仅用于方便的图形表示,因为我们可以轻松地对其进行描绘。从技术上讲,您可以横向绘制一个链表,从上到下、从下到上、从左到右,都没有关系。

所有链表都有一个从头到尾的单一方向。或者在双向链表的情况下,从头到尾和从尾到头的双向

我想你可以在技术上创建一个双向链表,其中所有 "left""prev" 指针都是 null 以使其看起来正确。或者让它的所有"right""next" 指针null 看起来像是向左移动。无论哪种情况,这样的方向都没有实际意义。

在内存中,链表节点Node.next的值只包含下一个节点的内存地址。该内存位置不必物理上就在节点旁边。从技术上讲,链表指针可以在整个内存中蜿蜒曲折,在操作系统和底层系统决定为它们分配内存的任何地方连接块。没有我们在现实生活中习惯的“自然”顺序,只是从头到尾的指针序列

例如,就计算机而言,这两个列表是等效的。我只是把它们画在不同的方向:)

【讨论】:

  • 大声笑,一个链表的方向应该只由它的头到尾方向决定。谢谢我应该多想一下,答案就在我面前。
猜你喜欢
  • 2013-11-25
  • 2017-12-13
  • 2020-07-05
  • 1970-01-01
  • 2019-05-16
  • 2011-12-13
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多