2014-10-13 4 views
0

Может кто-нибудь скажет мне, если я прав? Я учусь на среднесрочную перспективу.Понимание связанных списков (Java)

x - переменная, указывающая на узел связанного списка, а не последний узел в списке . t указывает на новый узел, которого нет в списке. не

x.next = t; 
t.next = x.next; 

Я считаю, что, когда придет время обновить t.next, x.next больше не оригинальный узел следующий х, но вместо т себе. Поэтому он создает цикл в списке

t = x.next 
x = t; 

Я считаю, что это ничего не делает для списка.

Благодарим вас заранее!

+0

Что вы пытаетесь сделать? Вставить t в список? Вы хотите вставить его до x или после x? – Eran

+0

_I верю, когда придет время обновить t.next, x.next больше не является исходным узлом, следующим за x, но вместо этого является t. Таким образом, он создает цикл в списке_ expand его, пожалуйста, –

+0

Если это код для вставки t, то первый фрагмент действительно ошибочен. 't.next = x.net' должно быть сделано первым. – Fildor

ответ

0

В этом случае узел магазина в переменной temp. Он не будет создавать цикл.

Object temp = x.next; 
x.next = t; 
t.next = temp; 

Во-первых у вас есть список, как это ..

X--->Y----->Z--> 

Вы хотите вставить узел t после X

t прямо сейчас является

t---->null 

Шаг 1- Теперь мы имеют temp указывающей на следующий

x---->y----->z-----> 
    ^
     | 
temp-- 

Шаг Х 2- Теперь иксы следующий указывает на t

x----->t----> 

Теперь основной список, как это

temp---->y---->z----> 

Шаг 3 Теперь t следующий указывает на темп, который равен только next poin тер

temp---->y--->z----> 
^ 
| 
---------- 
      | 
x---->t--- 

Так полученный список

x--->t---->y---->z-----> 
+0

Итак, в моем случае, если он не создает цикл, он ничего не делает для списка? – BritneyLar22

+0

«ничего не делает для списка?» Можете ли вы объяснить больше, какие изменения вы говорите со списком? –

+0

Выше метод просто вставляет узел после 'x' –

1

Вы также можете сделать это потокобезопасны так:

t.next = x.next; // let t and x point to the SAME next. 
x.next = t; // change the x.next to t(who has the old next) 
0

У вас уже есть объект x. Это, вероятно, текущий последний элемент связанного списка. Теперь, вы создаете новый объект T и связать его как элемент после X

X // Lets assume X.next == NULL. So linked list looks like this X -> Null 
X.next = T // Now X.next == T and T.Next == NULL, So linked list looks like this X -> T -> Null. 
T.next = X.next // Now T.next == T. So linked list is X -> T <->T 

Таким образом, когда вы дойдете до конца связанного списка, он всегда будет возвращать последний элемент вместо возвращения NULL.

Если вы пишете простой алгоритм для этого, сначала вам нужно создать элемент, а затем указать его переменную next. <First_element>.next = <First_element>. Таким образом, логика будет работать для всех экземпляров.

Простой эксперимент.

class Node{ 
    Node next = null; 
    int id =-1; 
} 

public class LinkedList{ 
    public static void main (String args[]){ 
     Node x = new Node(); 
     x.id = 0; 
     x.next = x; 

     // Now add a new element 
     Node t = new Node(); 
     t.id =1; 
     x.next = t; 
     t.next = x.next; // Now we have a linked list of 2 elements 

     Node mynode = x;//First element of linked list 
     for(int i =0; i < 3; i++){ 
     System.out.println(mynode.id); 
     mynode = mynode.next; 
     } 

    } 
} 

Выход:

0 
1 
1 
Смежные вопросы