简单链接列表C#AddAfter方法

时间:2011-03-28 18:41:29

标签: c# linked-list

我正在使用C#中的简单链接列表,我不知道如何在列表的末尾添加元素,colud任何人帮助?

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
            {                    
                ???????????????
            }
        } 
     }
} 

3 个答案:

答案 0 :(得分: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;
        }
    } 

答案 1 :(得分:0)

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

你仍然需要实现GetLastNode,否则你不会练习任何东西= P

答案 2 :(得分:0)

这个问题有点令人困惑。您是在询问如何将节点放在列表的末尾,还是作为列表中的下一个项目。

我必须在当天回家做作业(虽然是java)。如果要始终将节点添加到列表的末尾,则还需要编辑列表类以包含列表的头部和尾部。这将允许您添加项目到结尾或开始。

如果要始终将节点添加到末尾,则可以尝试编辑代码,以便在向末尾添加节点时,上一个节点的下一个节点值将设置为尾部而不是null。这将始终允许您将项目添加到列表的末尾(除非指定位置,否则大多数添加方法都会执行此操作)

简而言之: 将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;

            }
        }
    } 
 }

代码可能有些偏差(我还没有真正测试过),但这是你将要做的主要情况。