以下代码片段会产生什么结果?
假设x是链接列表链接
a. x.setNext( x.getNext().getNext() );
b. t.setNext (x.getNext());
x.setNext (t);
c. x.setNext(t);
t.setNext(x.getNext());
答案 0 :(得分:1)
解决这些问题的最佳方法是通过图表 - 它可以帮助您轻松理解。通过简单的方框表示每个节点。用箭头连接它们。然后执行每个方法&跟着它。
这是第一个:
假设一个正常的链表,节点x,y,z按顺序连接:
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);
会产生以下结果:
所以,现在你的节点x& y指着z。 Node x
无法再指向node y
,因为您已将其设置为指向node z
。现在,当涉及到链表时,您只能保存起始节点,即node x
。您永远不会引用其他节点。所以,你基本上已经失去了node y
。没有办法从start / x遍历/导航到它:
x.getNext()
会产生node z
z.getNext()
会产生null
因此,由于node y
丢失,您的链接列表会变为:
简而言之,x.setNext(x.getNext().getNext());
意味着删除x之后的节点。希望你能弄清楚其他两个。