簡體   English   中英

C#LinkedList addAfter反轉

[英]C# LinkedList addAfter to reverse

我正在研究面試,並嘗試在C#中反向鏈接列表。 我已經使用自己的節點類手動完成此操作,並且已使用副本列表完成了操作。 現在,我正在嘗試通過更改原始列表來做到這一點。

我創建了一個靜態方法:

    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可能不屬於列表(正如我從列表中按字面意義分配的那樣。)

您的for循環重復了太多次。 移動的總數應為節點數減1。您在進入循環之前正在執行第一步,因此for循環只應迭代比計數少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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM