2014-06-08 5 views
1

twin()이라는 링크 된 목록 [1 2 3 4]을 가져 와서 [1 1 2 2 3 3 4 4]. 나는 일하는 방법을 가지고 있지만 부분에 대해서는 혼란 스럽다. 내 코드에서 temp라는 새 SListNode 변수를 선언합니다. 이 임시 노드가 현재 노드를 복사 한 다음 연결하려고합니다. SListNode temp = current를 시도하면 프로그램이 실행되지 않습니다. 그러나 수동으로 임시 항목 및 다음 필드를 설정하면 메서드가 정상적으로 실행됩니다. SListNode temp = current please 할 때 어떤 일이 일어날 지 설명 할 수 있습니까?연결된 목록 노드 복사 및 연결된 목록 중간에 삽입

public void twin() { 

    SListNode current = head; 
    if(current == null){ 
     return; 
    } 

    for(int i = 0; i <this.length();i++){ 
     if(current == null){ 
      return; 
     } 
     SListNode temp = new SListNode(0); // Problem here when I substitute these 3 lines for SListNode temp = current; 
     temp.next = current.next; 
     temp.item = current.item; 
     current.next = temp; 
     current = current.next.next; 
    } 
} 
+0

* "프로그램이 실행되지 않습니다"*는 무엇을 의미합니까? 어떤 오류가 발생하고 있습니까? – Christian

+0

원형 목록입니까? 길이()는 어떻게 계산됩니까? –

+1

'temp = current' 할 때, 당신은 객체를 복사하지 않는다는 것을 주목하십시오. 당신은 그 객체에 접근하는 다른 방법을 제공하고 있습니다. 즉, '임시'와 '현재'는 같은 대상을 가리킬 것입니다. – Christian

답변

0

temp = current을 수행 한 경우 개체를 복사하지 않습니다. 해당 객체에 액세스하는 다른 방법을 제공하는 것입니다. 즉, tempcurrent이며 동일한 개체에을 나타냅니다.

당신이 temp.next = temp.next을하고 같은 것 때문에 라인

temp.next = current.next; 
temp.item = current.item; 

는, 아무것도하지 않습니다 것을 한 경우. 당신이 자체로 current의 다음 노드을 만드는 것입니다 라인

current.next = temp; 

에서 또한

( current.next current 될 것입니다).