我正在学习面试,试图扭转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可能不属于列表(因为我从列表中逐字地指定了它。第一次)
答案 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)