链接列表代码示例

时间:2014-11-03 03:10:09

标签: java linked-list

以下代码片段会产生什么结果?

假设x是链接列表链接

a.   x.setNext( x.getNext().getNext() );


b.   t.setNext (x.getNext());
     x.setNext (t);

c.   x.setNext(t);
     t.setNext(x.getNext());

1 个答案:

答案 0 :(得分:1)

解决这些问题的最佳方法是通过图表 - 它可以帮助您轻松理解。通过简单的方框表示每个节点。用箭头连接它们。然后执行每个方法&跟着它。

这是第一个:

假设一个正常的链表,节点x,y,z按顺序连接:

Linked List with three elements

  • x.getNext()会产生node y
  • y.getNext()会产生node z
  • z.getNext()会产生null,因为之后没有更多节点。
  • 同样,x.getNext().getNext()会在下一个"之后询问"节点,即node z
  • setNext(n)显然将下一个节点设置为n(之前的任何值都已替换)

因此,在x.setNext(x.getNext().getNext());语句中,您知道x.getNext().getNext()变为node z。因此,您x.setNext(z);会产生以下结果:

Linked List with mid-delOperation

所以,现在你的节点x& y指着z。 Node x无法再指向node y,因为您已将其设置为指向node z。现在,当涉及到链表时,您只能保存起始节点,即node x。您永远不会引用其他节点。所以,你基本上已经失去了node y。没有办法从start / x遍历/导航到它:

  • x.getNext()会产生node z
  • z.getNext()会产生null

因此,由于node y丢失,您的链接列表会变为:

Linked List with two nodes (one deleted)

简而言之,x.setNext(x.getNext().getNext());意味着删除x之后的节点。希望你能弄清楚其他两个。