2012-12-03 98 views
0

我正在鏈接列表..我成功插入和刪除節點在第一個節點..但是當我嘗試插入節點在最後..它給出了一個錯誤「對象引用未設置到對象」插入最後節點單鏈表

我的邏輯是正確的,但Visual Studio是產生一個異常不知道爲什麼 請幫我出的實例..下面

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

「我的邏輯是正確的,但視覺工作室正在產生一個異常」 - 不,你的邏輯是錯誤的,你的代碼導致異常 - 不要責怪你的工具! – tomfanning

回答

0

如果

完整的代碼給出列表是空的,首先會等於空和喲當您嘗試執行此操作時,您的代碼會引發異常previous.next = newNode;,因爲previous也是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時你試圖分配一個值​​。