2011-09-08 80 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函数列表的前面..

希望这会有所帮助,如果ü有其他问题,只是问