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;
            }
        }
    }
原文地址:https://www.cnblogs.com/pengdotnet/p/2971037.html