C#链表;双向链表

来源:互联网 发布:词组贝多芬知乎 编辑:程序博客网 时间:2024/05/17 20:33


//节点类

    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");
        }
        //查找节点参数是数据
        public Node Find(object obj)
        {
            Node current = new Node();
            current = header;
            while (current.Element != obj)
                current = current.Flink;
            return current;
        }
        //插入节点
        public void Insert(object newitem, object after)
        {
            Node current = new Node();
            Node newNode = new Node(newitem);
            current = Find(after);
            //要特别注意顺序和判断,图解释更好理解
            if (current.Flink != null)
                current.Flink.Blink = newNode;
                newNode.Flink = current.Flink;
                newNode.Blink = current;
                current.Flink = newNode;
        }
        //移除节点
        public void Remove(object obj)
        {
            Node current = Find(obj);
            if (!(current.Flink == null))
            {
                current.Blink.Flink = current.Flink;
                current.Flink.Blink = current.Blink;
                current.Flink = null;
                current.Blink = null;
            }
        }
        //找到最后的节点
        public Node FindLast()
        {
            Node current = new Node();
            current = header;
            while (!(current.Flink == null))
                current = current.Flink;
            return current;
        }
        //输出节点
        public void PrintReverse()
        {
            Node current = new Node();
            current = FindLast();
            while (!(current.Blink == null))
            {
                Console.WriteLine(current.Element);
                current = current.Blink;
            }
        }
0 0
原创粉丝点击