数据结构与算法-顺序链表

public class OrderedList where E : IComparable
    {
        public class Node
        {
            public E e;//值
            public Node next;//下一个节点的指针

            public Node(E e)
            {
                this.e = e;
                next = null;
            }
        }
        /// 
        /// 根节点
        /// 
        Node root;
        private int num;
        /// 
        /// 链表长度
        /// 
        public int Count => num;
        /// 
        /// 链表是否为空
        /// 
        public bool IsEmpty => num == 0;

        public OrderedList()
        {
            root = null;
            num = 0;
        }
        /// 
        /// 插入节点-有序排列
        /// 
        /// 
        public void InsertNode(E e)
        {
            if (root == null)
            {
                root = new Node(e);
                num++;
                return;
            }
            if (e.CompareTo(root.e) < 0)
            {
                Node curRoot = new Node(e);
                curRoot.next = root;
                root = curRoot;
                num++;
                return;
            }
            Node pre = null;
            Node cur = root;
            while (cur != null && e.CompareTo(cur.e) > 0)
            {
                pre = cur;
                cur = cur.next;
            }
            Node node = new Node(e);

            pre.next = node;
            node.next = cur;
            num++;
        }
        /// 
        /// 包含
        /// 
        /// 
        /// 
        public bool Contains(E e)
        {
            return Contains(root, e);
        }
        private bool Contains(Node node, E e)
        {
            if (node == null)
            {
                return false;
            }
            if (e.CompareTo(node.e) == 0)
            {
                return true;
            }

            return Contains(node.next, e);
        }
        /// 
        /// 删除节点
        /// 
        /// 
        public void Remove(E e)
        {
            if (!Contains(e))
            {
                return;
            }
            Node pre = null;
            Node cur = root;
            while (e.CompareTo(cur.e) > 0)
            {
                pre = cur;
                cur = cur.next;
            }
            //删除的是第一个数
            if (pre == null)
            {
                root = cur.next;
                cur = null;
                num--;
                return;
            }
            pre.next = cur.next;
            cur = null;
            num--;
        }
        /// 
        /// 转换成集合
        /// 
        /// 
        public E[] ToArray()
        {
            E[] arrs = new E[num];
            for (var i = 0; i < arrs.Length; i++)
            {
                arrs[i] = GetIndex(i + 1).e;
            }
            return arrs;
        }
        /// 
        /// 获取链表的下表-该节点在链表的第一个位置
        /// 
        /// 
        public Node GetIndex(int index)
        {
            int i = 1;
            Node cur = root;

            if (index >= 1 && index <= num)
            {
                while (i < index)
                {
                    cur = cur.next;
                    i++;
                }
                return cur;
            }
            return null;
        }
    }

你可能感兴趣的:(数据结构与算法,数据结构,c#)