C# data structure-doubly linked list

The concept of linked list and the difference between linked list and array will not be described too much. I believe everyone is familiar with it. Here we implement a simple doubly linked list in c# language, as a backup, record it~
Insert picture description here

	public class Node<T>
    {
    
    
        private Node<T> prev;

        private Node<T> next;

        private T val;

        public Node<T> Prev {
    
     get {
    
     return prev; } set {
    
     prev = value; } }

        public Node<T> Next {
    
     get {
    
     return next; } set {
    
     next = value; } }

        public T Data {
    
     get {
    
     return val; } set {
    
     val = value; } }

        public Node(T item)
        {
    
    
            val = item;
        }
    }
public class Link<T>
{
    
    
        public Node<T> head {
    
     get; set; }

        public int count {
    
     get; set; }

        public Link()
		{
    
    
            Node<T> node = new Node<T>(default(T));
            node.Next = node;
            node.Prev = node;
            head = node;
            count++;
        }

        public Node<T> Append(T node)
		{
    
    
            Node<T> newNode = new Node<T>(node);
            newNode.Prev = head.Prev;
            newNode.Next = head;
            head.Prev.Next = newNode;
            head.Prev = newNode;
            count++;
            return newNode;
        }

        public Node<T> Insert(int index, T node)
		{
    
    
            if (index < 0 || index > count)
                throw new IndexOutOfRangeException("索引超出界限");
            if (index == 0)
                return Append(node);
            else
            {
    
    
                Node<T> bnode = Get(index);
                Node<T> newNode = new Node<T>(node);
                bnode.Prev.Next = newNode;
                newNode.Prev = bnode.Prev;
                newNode.Next = bnode;
                bnode.Prev = newNode;
                count++;
                return newNode;
            }
        }

        public void Delete(int index)
		{
    
    
            if (index < 0 || index > count)
                throw new IndexOutOfRangeException("索引超出界限");
            Node<T> node = Get(index);
            node.Prev.Next = node.Next;
            node.Next.Prev = node.Prev;
            count--;
        }

        public void showAll()
		{
    
    
            for (int i = 0; i < count; i++)
            {
    
    
                Console.WriteLine($"index:{i},content:{Get(i).Data}");
            }
        }


        public Node<T> Get(int index)
		{
    
    
            if (index < 0 || index >= count)
                throw new IndexOutOfRangeException("索引超出界限");

            //如果要找的节点在前半部分,则顺序查找,
            if (index < count / 2)
            {
    
    
                var node = head.Next;
                for (int i = 0; i < index; i++)
                    node = node.Next;
                return node;
            }
            //否则逆序查找
            var preNode = head.Prev;
            for (int i = 0; i < count-1-index; i++)
                preNode = preNode.Prev;
            return preNode;
        }
        /// <summary>
        /// 获取最后一条
        /// </summary>
        /// <returns></returns>
        public Node<T> GetLast()
		{
    
    
            return Get(count - 1);
        }

        public Node<T> GetFirst()
		{
    
    
            return Get(0);
        }
    }

test:

	class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            Link<string> dlink = new Link<string>();
            dlink.Append("我是第一位");
            dlink.Append("我是第二位");
            dlink.Append("我是第三位");
            dlink.Insert(2,"我是第四位,我占用了第二的位置");
            dlink.Append("我是第五位");
            dlink.Append("我是第六位");
            dlink.Append("我是第七位");
            dlink.Append("我是第八位");
            dlink.Append("我是第九位");
            dlink.Delete(7);

            dlink.showAll();

            Console.ReadLine();
        }
    }

print:
Insert picture description here


Insert picture description here

Guess you like

Origin blog.csdn.net/xuetian0546/article/details/109015663