2011-03-28 40 views
1

我在C#中使用簡單的鏈接列表,我不知道如何添加元素在列表的末尾,colud任何人helpme?簡單的鏈接列表C#的AddAfter方法

namespace ConsoleApplication1 
{ 
    class Class1 
    { 
     public class Node() 
     { 
      public int Data; 
      public Node Next; 
     } 

     private Node FirstNode=null; 

     public void AddBefore(int number)   
     { 
      Node NewNode=new Node(); 

      NewNode.Next=FirstNode; 
      NewNode.Data=number; 

      FirstNode=NewNode; 

     } 

     public void AddAfter(int number) 
     { 
      if (FirstNode==null) 
      { 
       AddBefore(number); 
      } 
      else 
      {      
       ??????????????? 
      } 
     } 
    } 
} 
+0

正在做作業嗎? = P – dcarneiro 2011-03-28 18:43:42

+0

不是功課,但我有一個練習,我根本不理解這些列表。 – Arthur 2011-03-28 18:44:59

+0

在附註上,您可能想要將AddBefore和AddAfter方法重命名爲AddFront和AddBack之類的東西。您現在使用的名稱有些令人困惑,因爲它們聽起來像您試圖在特定索引之前或之後放置節點。 – 2011-03-28 19:21:57

回答

0
else 
{      
    Node NewNode=new Node(); 
    NewNode.Data=number; 
    Node LastNode = GetLastNode(); 
    LastNode.Next = NewNode; 
} 

你仍然必須執行GetLastNode否則你不會練什麼= P

2

你需要通過你的列表進行迭代,直到找到了最後一個節點,然後將其添加到結束。例如:

public void AddAfter(int number) 
    { 
     if (FirstNode==null) 
     { 
      AddBefore(number); 
     } 
     else 
     { 
      // Finding the last node 
      Node currentNode = FirstNode; 
      while (currentNode.NextNode != null) 
       currentNode = currentNode.NextNode; 

      // Constructing a new node 
      Node newNode = new Node(); 
      newNode.Data = number; 
      newNode.Next = null; 

      // Adding the new node to the end 
      currentNode.NextNode = newNode; 
     } 
    } 
0

這個問題有點令人困惑。你是問如何將一個節點放在列表的末尾,或者是列表中的下一個項目。

我不得不在今天做一個家庭作業分配的方式(這是Java雖然)。如果您想要始終將一個節點添加到列表的末尾,那麼您還需要編輯列表類以包含列表的頭部和尾部。這將允許您將項目添加到結尾或開始。

如果你想總是添加一個節點到最後,那麼你可以嘗試編輯代碼,這樣當你添加一個節點到最後時,前一個節點的下一個節點值將被設置爲尾部而不是空值。這將始終允許您將項目添加到列表的末尾(這是大多數添加方法做,除非位置反正指定)

簡而言之: 添加Node tailNode = null;Class並添加將獲得的方法併爲Node類設置下一個節點。一旦做到這一點,然後再編輯代碼,以便它看起來是這樣的:

class Class1 
{ 
    public class Node() 
    { 
     public int Data; 
     public Node Next; 

     //Class to set next node 
     public void setNext(Node nextNode) 
     { 
      //Set next node 
      Next = nextNode; 
     } 

     //Get next node 
     public Node getNext() 
     { 
      return Next; 
     } 

    } 

    private Node FirstNode=null; 
    private Node lastNode = null; 

    public void AddBefore(int number)   
    { 
     Node NewNode=new Node(); 

     NewNode.Next=FirstNode; 
     NewNode.Data=number; 

     FirstNode=NewNode; 

    } 

    public void AddAfter(int number) 
    { 
     if (FirstNode==null) 
     { 
      AddBefore(number); 
     } 
     else 
     {      
      if(FirstNode.getNext() == null) 
      { 
       //No tail. Make this node tail 
       lastNode = new Node(); 
       lastNode.Data = number; 
       //Set first node's next to last node 
       FirstNode.setNext(lastNode); 
      }else{ //TailNode already set 
       //New node to be tail 
       Node newLastNode = new Node(); 
       newLastNode.Data = number; 
       //Set the current tail node to have this node as next 
       lastNode.setNext(newLastNode); 
       //Make new last node last node 
       lastNode = newLastNode; 

      } 
     } 
    } 
} 

的代碼可能會有點關閉(我還沒有真正測試過),但是這是你是什麼樣的主畫面將不得不做。