链接列表略有变化的不同输出

时间:2018-05-15 11:26:39

标签: java object linked-list

这是代码:

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;
} 

这是我的输入数据:

enter image description here

这个给出的响应是连续循环。我附上了输出:

enter image description here

但如果我

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;
}

输出:

enter image description here

这很有效。问题是什么?

1 个答案:

答案 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节点。