这是代码:
public void insertAtindex(int index,int data)
{
Node node=new Node();
node.data=data;
Node n;
n=head;
for(int i=0;i<index-1;i++)
{
n=n.refrence;
}
Node temp=n;
n.refrence=node;
node.refrence=temp;
}
这是我的输入数据:
这个给出的响应是连续循环。我附上了输出:
但如果我
public void insertAtindex(int index,int data)
{
Node node=new Node();
node.data=data;
Node n;
n=head;
for(int i=0;i<index-1;i++)
{
n=n.refrence;
}
Node temp=n.refrence;
n.refrence=node;
node.refrence=temp;
}
输出:
这很有效。问题是什么?
答案 0 :(得分:4)
当然,这两个片段会产生不同的输出。
在第一个代码段中,您在node
之前插入n
,然后让n.reference
引用node
,创建一个包含两个节点的循环列表。
假设在声明temp
之前,n
引用节点X和n.reference
引用节点Y. node
引用节点NEW。
让我们来说明你执行的任务:
X -> Y
^
|
n==temp
X -> NEW
^ ^
| |
n==temp node
X -> NEW -> X
^ ^
| |
n==temp node
因此node.reference.reference == node
。你有一个周期。
在第二个代码段中,您在node
与其后的n
之间插入Node
。这可能是正确的实施。
让我们再次说明你执行的任务:
X -> Y
^ ^
| |
n temp
X -> NEW Y
^ ^ ^
| | |
n node temp
X -> NEW -> Y
^ ^ ^
| | |
n node temp
您在节点X和Y之间插入了NEW节点。