Связанный список Различный вывод при незначительном изменении - PullRequest
0 голосов
/ 15 мая 2018

Вот код:

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 голосов
/ 15 мая 2018

Конечно, два фрагмента дают различный вывод.

В первом фрагменте вы вставляете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...