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()函数.有帮助吗?
反转链表的算法非常简单:
所以,把它分解成更小的部分.你能编写方法(1)检查列表是否为空(2)或一个元素(3)从非空列表中删除第一项,(4)将项目放在列表的头部?如果你可以编写这四种方法,那么你可以将它们组合在一起写反向.
这就是你应该如何处理你的编程问题; 编程就是将复杂的问题分解为更简单的问题,解决更简单的问题,并结合解决方案.