2014-10-13 2 views
0

누군가 내가 올바른지 말해 줄 수 있습니까? 나는 중간 고사를 위해 공부하고 있습니다.링크 된 목록 이해 (Java)

x는 연결된 목록 노드를 가리키는 변수이고 목록의 마지막 노드는 아닙니다. t는 목록에없는 새 노드를 가리 킵니다.

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

나는 t.next를 업데이트해야 할 때 x.next가 더 이상 x 다음의 원래 노드가 아니라 그 자체가 아니라고 생각합니다. 따라서 목록에주기가 생성됩니다.

t = x.next 
x = t; 

저는 이것이 목록에없는 것으로 생각합니다.

미리 감사드립니다.

+0

당신이 뭘 하려는지? 목록에 t를 삽입 하시겠습니까? x 이전이나 x 뒤에 삽입 하시겠습니까? – Eran

+0

_t.next를 업데이트 할 시간이되면 x.next는 더 이상 x 다음의 원래 노드가 아니라 그 자체가됩니다. 그래서 목록에서 사이클을 만듭니다. 확장하십시오 –

+0

이것이 t를 삽입하는 코드라면, 첫 번째 코드 단편은 실제로 잘못되었습니다. 't.next = x.net'가 먼저 이루어져야합니다. – Fildor

답변

0

이 경우 저장 노드는 temp입니다. 사이클을 생성하지 않습니다.

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

먼저이 같은 목록을 가지고 ..

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

당신은 지금 tX

후 노드 t을 삽입 할

t---->null 

단계 1입니다 이제 X의 다음

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

단계에 temp 포인팅이 2 지금의 X의 다음이 t

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

지금 주요 목록에 가리키는 것은이

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

단계처럼 3 이제 t 다음은 온도가 겨우 next입니다. TER

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