2012-12-03 2 views
0

링크 된 목록에서 작업하고 있습니다. 첫 번째 노드에서 노드를 성공적으로 삽입하고 삭제했습니다.하지만 노드를 마지막에 삽입하려고하면 "개체 참조가 설정되지 않았습니다.삽입 마지막 노드 단일 링크 된 목록

전체 코드가 만약

class MyList 
{ 
    private Node first; 
    private Node current; 
    private Node previous; 

    public MyList() 
    { 
     first = null; 
     current = null; 
     previous = null; 
    } 

    public void InsertLast(int data) 
    { 
     Node newNode = new Node(data); 

     current = first; 

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

     previous.next = newNode; 
     newNode.next = null; 
    } 

    public void displayList() 
    { 
     Console.WriteLine("List (First --> Last): "); 
     Node current = first; 
     while (current != null) 
     { 
      current.DisplayNode(); 
      current = current.next; 
     } 
     Console.WriteLine(" "); 
    } 
} 



class Node 
{ 
    public int info; 
    public Node next; 

    public Node(int a) 
    { 
     info = a; 
    } 

    public void DisplayNode() 
    { 
     Console.WriteLine(info); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     MyList newList = new MyList(); 

     newList.InsertLast(10); 
     newList.InsertLast(20); 
     newList.InsertLast(30); 
     newList.InsertLast(40); 

     newList.displayList(); 

     Console.ReadLine(); 
    } 
} 
+1

"내 논리는 맞지만 Visual Studio에서 예외가 생성됩니다"- 아니요, 논리가 잘못되어 코드가 예외를 유발하고 있습니다 - 도구를 비난하지 마십시오! – tomfanning

답변

0

아래에 주어진 객체 "

내 논리가 정확하지만 이 저를 도와주세요 왜 비주얼 스튜디오 예외를 생성하는 몰라의 인스턴스 ..에 목록이 비어 있으면 처음에는 null과 yo가됩니다. 이 previous.next = newNode; 일 때 previousnull이기 때문에 ur 코드가 예외를 발생시킵니다. 주먹가 null 경우 당신은 이런 식으로 뭔가를 구현하지만 돌볼 수 :

public void InsertLast(int data) 
{ 
     Node newNode = new Node(data); 
     if (first == null) 
     { 
      first = newNode; 
     } 
     else 
     { 
      current = first; 

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

편집 : 첫 번째 노드를 추가 할 때, 당신은 첫째로 새로운 요소를 추가, 그래서 같은 코드를 다시 작성해야합니다 첫 번째 노드 만있는 경우입니다.

public void RemoveLast() 
{    
     if (first != null)//there is no point in removing since the list is empty 
     { 
      if (first.next == null) //situation where list contains only one node 
       first = null; 
      else //all other situations 
      { 
       current = first; 

       while (current.next != null) 
       { 
        previous = current; 
        current = current.next; 
       } 
       previous.next = null; 
      } 
     } 
} 
+0

네, 작동합니다 ... 고맙다 aloot ... 내가 마지막으로 노드를 삭제하는 방법을 알려주시겠습니까? –

+0

편집 된 답변을 확인하십시오. 그것이 도움이 되었으면 좋겠다 –

+0

그것은 내가 alooot ...를 도와 준다. .. 고맙다 aloot ... 신의 축복 –

2

은 기본적으로 당신이 빈 목록의 경우 처리해야합니다 방법을 확인하십시오. 현재 코드에서 목록이 비어있을 때 이전, 현재 및 첫 번째가 모두 null과 같습니다. 이전에 null과 같을 때 previous.next()에 값을 할당하려고하기 때문에 오류가 발생했습니다.