2011-09-08 79 views
0

我正在學習如何在c#中創建鏈表。我有下面的代碼不適合我。我只是想在下面添加主節點,然後迭代將打印到控制檯的所有節點。如何在鏈表中創建多個節點,然後遍歷節點

using System; 

class node 
{ 
    public object data; 
    public node next; 

    public node() 
    { 
     data = null; 
     next = null; 
    } 
    public node(object o) 
    { 
     data = o; 
     next = null; 
    } 
    public node(object data, node next) 
    { 
     this.data = data; 
     this.next = next; 
    }  
} 

class linkedList 
{ 
    private node headNode; 
    private node tailNode; 

    int node_count; 

    public void add(object entry) 
    { 
     if (headNode == null) 
     { 
      node newNode = new node(entry); 
      headNode = newNode; 
      ++node_count; 
     } 
     else 
     { 
      if (node_count == 1) 
      { 
       node newNode = new node(entry, headNode); 
       tailNode = newNode;     
      } 
      else 
      { 
       node newNode = new node(entry, tailNode); 
       tailNode = newNode; 
      } 
      ++node_count; 
     } 
    } 

    public void returnData() 
    { 
     if (headNode.next != null) 
     { 
      while (headNode.next != null) 
      { 
       Console.WriteLine(headNode.data + "\n"); 
      } 
     } 
     else 
      Console.WriteLine("Not Available"); 
    } 
} 

class Exercise 
{ 
    static int Main() 
    { 
     linkedList ll = new linkedList(); 
     ll.add(8); 
     ll.add(2); 
     ll.add(7); 
     ll.add(4); 
     ll.add(9); 
     ll.add(10); 

     ll.returnData(); 

     Console.ReadLine(); 
     return 0; 
    } 
} 
+0

如何它不起作用嗎? – BoltClock

+0

@boltclock當我編譯並運行它時出現了不可用 –

+2

建議使您的代碼更易於閱讀本身和其他人 - 開始遵循.NET命名約定:http://msdn.microsoft.com/zh-cn/ us/library/ms229045.aspx然後更具體地說錯誤比「它不可用」。閱讀我的指南,問好問題:http://tinyurl.com/so-hints –

回答

2

你的代碼是完全破碎。

下面就來運行它

using System; 

class node 
{ 
    public object data; 
    public node next; 

    public node() 
    { 
     data = null; 
     next = null; 
    } 
    public node(object o) 
    { 
     data = o; 
     next = null; 
    } 
    public node(object data, node next) 
    { 
     this.data = data; 
     this.next = next; 
    }  
} 

class linkedList 
{ 
    private node headNode; 
    private node tailNode; 

    int node_count; 

    public void add(object entry) 
    { 
     node newNode = new node(entry); 
     if (headNode == null) 
      headNode = newNode; 
     if (tailNode != null) 
      tailNode.next = newNode; 
     tailNode = newNode; 
     ++node_count; 
    } 

    public void returnData() 
    { 
     node currentNode = headNode; 

     if (currentNode == null) 
      Console.WriteLine("Not Available"); 

     while (currentNode != null) { 
      Console.WriteLine(currentNode.data); 
      currentNode = currentNode.next; 
     } 

    } 
} 

class Exercise 
{ 
    static int Main() 
    { 
     linkedList ll = new linkedList(); 
     ll.add(8); 
     ll.add(2); 
     ll.add(7); 
     ll.add(4); 
     ll.add(9); 
     ll.add(10); 

     ll.returnData(); 

     return 0; 
    } 
} 
0

要打印您的數據,您需要做while (headNode.next != null)以便您的列表被遍歷。

它也像你從不更新node.next要麼

if (node_count == 1) // this seems unnecessary. 
{ 
    node newNode = new node(entry, headNode); 
    tailNode = newNode; 
    //should be node.next = newnode;     
} 
+0

對不起,我上傳之前編輯我的代碼...意外刪除該部分認爲這是別的東西。這並不能解決我的問題,但我現在要編輯我的問題來包含它 –

1

需要最小的改動你去一個小轉身:d

首先所有的類名前人的精力與uppercap啓動,以便節點(未節點)和LinkedList(不鏈表) 。

現在,如果你願意,你可以使用這個功能,但如果ü嘗試返回一個列表,只有一個節點......怎麼一回事,因爲你是incorectly添加節點,這將不會工作。

public void returnData() 
    { 
     if (tailNode.next != null) 
     { 
      Node currentNode = tailNode; 
      while (currentNode != null) 
      { 
       Console.WriteLine(currentNode.data + "\n"); 
       currentNode = currentNode.next; 
      } 
     } 
     else 
      Console.WriteLine("Not Available"); 
    } 

但更經常經典的LinkedList可以改變LinkedList的添加功能,這...

public void add(object entry) 
    { 
     if (headNode == null) 
     { 
      Node newNode = new Node(entry); 
      headNode = newNode; 
      ++Node_count; 
     } 
     else 
     { 
      if (Node_count == 1) 
      { 
       Node newNode = new Node(entry); 
       headNode.next = newNode; 
       tailNode = newNode;     
      } 
      else 
      { 
       Node newNode = new Node(entry); 
       tailNode.next = newNode; 
       tailNode = newNode; 
      } 
      ++Node_count; 
     } 
    } 

和returnData到...

public void returnData() 
    { 
     if (headNode.next != null) 
     { 
      Node currentNode = headNode; 
      while (currentNode != null) 
      { 
       Console.WriteLine(currentNode.data + "\n"); 
       currentNode = currentNode.next; 
      } 
     } 
     else 
      Console.WriteLine("Not Available"); 
    } 

該代碼添加節點列表的末尾,如果你想將節點添加到您可以修改add函數列表的前面..

希望這會有所幫助,如果ü有其他問題,只是問