2011-04-01 5 views
2

역 링크 된 목록 함수에 대해 잘 excep 작동하는 Java에서 다음 연결된 목록 프로그램이 있습니다. 내가 무엇을 놓치고 있습니까? 연결 목록이 손상 (효과적으로는 이전 헤드 소자로 감소 될 것이다)가 있도록역 링크 된 목록 문제

public class LinkedList { 

private Link first; 

public LinkedList() 
{ 
    first = null; 
} 
public boolean isEmtpy() 
{ 
    return(first==null); 
} 

public void insertFirst(int id, double dd) 
{ 
    Link newLink=new Link(id,dd); 
    newLink.next=first;  //new link --> old first 
    first =newLink;   //first --> newLink 
} 
public Link deleteFirst() 
{ 
    Link temp=first; 
    first=first.next; 
    return temp; 
} 
public void displayList() 
{ 
    Link current=first; 
    System.out.println("List (first-->last)"); 
    while(current!=null) 
    { 
     current.displayLink(); 
     current=current.next; 
    }  
    System.out.println(" "); 
} 
public Link find(int key) 
{ 
    Link current=first; 

    while(current.iData!=key) 
    { 
     if(current.next==null) 
      return null; //last link 
     else 
      current=current.next; 

    } 
    return current; 
} 
public Link delete(int key) 
{ 
    Link current=first; 
    Link previous=first; 

    while (current.iData!=key) 
    { 
     if (current.next==null) 
      return null; 
     else 
     { 
      previous=current; 
      current=current.next; 
     } 
    } 
    if(current==first) 
     first=first.next; 
    else 
     previous.next=current.next; 
    return current;  
} 

public void insertAfter(int key, int id, double dd) 
{ 
    Link current=first; 
    Link previous=first; 

    Link newLink = new Link(id,dd); 
    while (current.iData!=key) 
    { 
     if (current.next==null) 
      System.out.println("At the last Node"); 
     else 
     { 
      previous=current; 
      current=current.next; 

     } 
    } 
    System.out.println("Value of previous "+ previous.iData); 
    System.out.println("Value of current after which value will be inserted is " + current.iData); 
    newLink.next=current.next; 
    current.next=newLink; 
} 

public Link reverse() 
{ 
    Link previous=null; 
    Link current=first; 
    Link forward; 

    while(current!=null) 
    { 
     forward=current.next; 
     current.next=previous; 
     previous=current; 
     current=forward; 
    } 
    return previous; 
} 
} 

답변

7

문제는, reverse()는 새로운 값 first 설정하지 않는다. (또는 대신에 - 당신이 정말로 새로운 헤드 노드를 반환해야합니까?)

당신은 값을 반환하기 전에 결국

first = previous; 

를 추가해야합니다.

+0

완벽합니다. 고마워. – user665319

-1

새 머리가 ​​반환됩니다. 맞습니까? 나는 처음 머리의 다음이 null로 설정되어야한다고 생각한다. 그렇지 않으면리스트를 가로 질러 갈 때 마지막 두 요소 사이를 반복 할 것이다.

어쨌든 ...

+0

횡단 중에는 *가 null로 설정됩니다. –

0

변경된 코드입니다. last를 null 옆에 만들고 처음부터 다시 초기화해야합니다.

public Link reverse() 
{ 
    Link previous=null; 
    Link current=first; 
    Link forward; 

    while(current!=null) 
    { 
     forward=current.next; 
     current.next=previous; 
     previous=current; 
     current=forward; 
    } 
    first.next = null; 
    first = previous; 
    return previous; 
} 
}