C#数据结构之双向链表
链表定义:
public class Node { public object Element; //指向下一个节点的链接 public Node FLink; //指向上一个节点的链接 public Node BLink; public Node() { Element = null; FLink = null; BLink = null; } public Node(object theElement) { Element = theElement; FLink = null; BLink = null; } }
链表操作类:
public class LinkedList { //头结点 protected Node Header; public LinkedList() { Header = new Node("header"); } private Node Find(object item) { Node current = new Node(); current = Header; while (current.Element != item) { current = current.FLink; } return current; } public void Insert(object newItem, object after) { Node current = new Node(); Node newNode = new Node(newItem); current = Find(after); newNode.FLink = current.FLink; newNode.BLink = current; current.FLink = newNode; } public void Remove(object n) { //找到要删除的节点 Node p = Find(n); if (!(p.FLink == null)) { //把此节点的向后连接属性设置为指向此节点的前连接所指向的节点 p.BLink.FLink = p.FLink; p.FLink.BLink = p.BLink; p.FLink = null; p.BLink = null; } } private Node FindLast() { Node current = new Node(); current = Header; while (!(current.FLink == null)) { current = current.FLink; } return current; } //反向打印链表 public void PrintReverseList() { Node current = new Node(); current = FindLast(); while (!(current.BLink == null)) { Console.WriteLine(current.Element); current = current.BLink; } } }