c#中的反向双向链表

Kir*_*cev -1 c# linked-list doubly-linked-list

我试图扭转循环双向链表,看起来像这样: 看起来像这样

这是我的Node类:

       private class Node<T>
   {
       public T Data { get; set; }
       public Node<T> PreviousNode { get; set; }
       public Node<T> NextNode { get; set; }

       public Node(object data, Node<T> next, Node<T> previous)
       {
           Data = (T) data;
           PreviousNode = previous;
           NextNode = next;
       }
   }
Run Code Online (Sandbox Code Playgroud)

这是我的链接列表类的一部分,这里是我的反向功能存储:

 public class DoublyLinkedList<T> :IList<T>
{
    private Node<T> headerNode;
 public DoublyLinkedList()
{
        headerNode = new Node<T>(null, null, null);

        headerNode.NextNode     = headerNode;
        headerNode.PreviousNode = headerNode;
        Count = 0;
}

   public void Insert(int index, T item)
   {
        Node<T> node;

        if (index == Count)
            node = new Node<T>(item, headerNode, headerNode.PreviousNode);                                                                   
        else
        {
            Node<T> tmp = FindNodeAt(index); 

            node = new Node<T>(item, tmp, tmp.PreviousNode);
        }

        node.PreviousNode.NextNode = node; 
        node.NextNode.PreviousNode = node; 

        Count++;

    }
 public void Reverse()
    {
       Node<T> temp;
       for (Node<T> node = headerNode.NextNode; node != headerNode; node = node.NextNode)
       {

       }
    }
Run Code Online (Sandbox Code Playgroud)

我完全坚持这个Reverse()函数.有帮助吗?

Eri*_*ert 7

反转链表的算法非常简单:

  • 列表是空的还是一个元素?如果是,那么它已经被逆转了.
  • 否则,创建一个新的空列表.在循环中,从旧列表中删除第一个项目并将其添加到新列表的开头.循环直到第一个列表为空.

所以,把它分解成更小的部分.你能编写方法(1)检查列表是否为空(2)或一个元素(3)从非空列表中删除第一项,(4)将项目放在列表的头部?如果你可以编写这四种方法,那么你可以将它们组合在一起写反向.

这就是你应该如何处理你的编程问题; 编程就是将复杂的问题分解为更简单的问题,解决更简单的问题,并结合解决方案.