C#LinkedList addAfter反转

时间:2018-01-21 01:36:52

标签: c#

我正在学习面试,试图扭转C#中的链表。我已经使用自己的节点类手动完成了,我使用了一个copylist。现在我试图通过改变原始列表来做到这一点。

我创建了一个静态方法:

    public static void reorderList(LinkedList<String> list)
    {
        LinkedListNode<String> a;
        LinkedListNode<String> lastNode;

        lastNode = list.Last;
        list.RemoveLast();
        list.AddFirst(lastNode);
        lastNode = list.First;

        Console.WriteLine(list.Find(lastNode.Value));            
        for (int i=1;i<=list.Count;i++)
        {
            a = list.Last;
            list.RemoveLast();
            list.AddAfter(lastNode,a);
            lastNode = a;
        }
    }

我们的想法是获取最后一个节点,将其作为第一个节点,然后获取每个后续​​的最后一个节点并将其放在先前移动的节点之后。但是我收到错误“'LinkedList节点不属于当前的LinkedList。”我无法弄清楚为什么lastNode可能不属于列表(因为我从列表中逐字地指定了它。第一次)

1 个答案:

答案 0 :(得分:0)

你的for循环迭代次数太多了。移动的总数应该是节点数减1.您在进入循环之前执行第一步,因此循环应该只比计数小2。 考虑一个简单的3节点列表:

1,2,3

在进入循环之前,您将3移动到第一个位置:

3,1,2

for循环的第一次迭代,i = 1,在3之后移动2:

3,2,1

你应该到此为止! 第二次迭代i = 2,在2之后移动1,没有变化:

3,2,1

第三次迭代i = 3,lastNode现在为1,但是它将删除最后一个节点(也是1),然后尝试在不再在列表中的lastNode之后添加它:

3,2 (1 is removed)