Exemple #1
0
        public void Insert(T item, int i)
        {
            if (IsEmpty() || i < 1)
            {
                return;
            }
            if (i > Length())
            {
                Append(item);
                return;
            }
            if (i == 1)
            {
                DLinkedNode <T> p = new DLinkedNode <T>(item, null, First);
                First.Prev = p;
                First      = p;
                return;
            }
            int             j       = 1;
            DLinkedNode <T> left    = new DLinkedNode <T>();
            DLinkedNode <T> newNode = new DLinkedNode <T>(item, null, null);
            DLinkedNode <T> current = new DLinkedNode <T>();

            current = First;
            while (current != null && j < i)
            {
                ++j;
                left    = current;
                current = current.Tail;
            }
            left.Tail    = newNode;
            newNode.Prev = left;
            newNode.Tail = current;
            current.Prev = newNode;
        }
Exemple #2
0
        public void Delete(uint i)
        {
            if (IsEmpty() || i < 1 || i > Length())
            {
                return;
            }

            var current = new DLinkedNode <T>();

            current = First;
            if (i == 1)
            {
                First      = current.Tail;
                First.Prev = null;
                return;
            }
            int j = 1;

            while (current != null && j < i)
            {
                ++j;
                current = current.Tail;
            }
            if (current.Tail != null)//最后一个元素不进入
            {
                current.Tail.Prev = current.Prev;
            }
            current.Prev.Tail = current.Tail;
        }
Exemple #3
0
        public void Delete(T item)
        {
            if (IsEmpty())
            {
                return;
            }
            var current = new DLinkedNode <T>();

            current = First;
            if (First.Data.Equals(item))
            {
                First      = current.Tail;
                First.Prev = null;
                return;
            }
            while (current != null && !current.Data.Equals(item))
            {
                current = current.Tail;
            }
            if (current.Tail != null)//最后一个元素不进入
            {
                current.Tail.Prev = current.Prev;
            }
            current.Prev.Tail = current.Tail;
        }
Exemple #4
0
        public void Append(T item)
        {
            if (First == null)
            {
                First = new DLinkedNode <T>(item, null, null);
                return;
            }

            var p = new DLinkedNode <T>();

            p = First;
            while (p.Tail != null)
            {
                p = p.Tail;
            }
            p.Tail = new DLinkedNode <T>(item, p, null);
        }
Exemple #5
0
        public DLinkedNode <T> Select(int index)
        {
            if (index < 1 || index > Length())
            {
                return(new DLinkedNode <T>());
            }
            var p = new DLinkedNode <T>();

            p = First;
            int i = 1;

            while (i < index)
            {
                i++;
                p = p.Tail;
            }
            return(p);
        }
Exemple #6
0
 public void Clear()
 {
     First = null;
 }
Exemple #7
0
 public DLinkedNode()
 {
     data      = default(T);
     this.prev = null;
     this.tail = null;
 }
Exemple #8
0
 public DLinkedNode(T data, DLinkedNode <T> prev, DLinkedNode <T> tail)
 {
     this.data = data;
     this.prev = prev;
     this.tail = tail;
 }
Exemple #9
0
 public DoubleLinkedList()
 {
     First = null;
 }
Exemple #10
0
        static void Main(string[] args)
        {
            Test1 t1  = new Test1();
            var   rlt = t1.TowSum2(new int[] { 2, 3, 5, 6 }, 11);

            Console.WriteLine(string.Join(",", rlt));

            Console.WriteLine($"无重复最长字符串长度:{t1.LengthOfLongestSubstring2("pwoyt8wkew")}");
            Console.WriteLine($"数组长度过滤之后:{string.Join(",", t1.removeDistance(new int[] { 1, 2, 3, 4, 5, 5, 7 }, 5))}");

            Console.WriteLine($"A组对B组的最优排序:{string.Join(",", t1.advantageCount(new int[] { 12, 24, 8, 32 }, new int[] { 13, 25, 32, 11 }))}");


            MYLinkList <string> list = new MYLinkList <string>();

            list.Append("abc");
            list.Append("123");
            list.Append("链表数据");
            list.Append("老妈肥肠面");
            list.Append(" ");
            list.Insert("插入数据", 4);//这里的i不是索引
            //list.Delete(" ");
            list.Delete(0);
            Console.WriteLine($"链表总长度为:{list.Length}");

            //list.Clear();
            Node <string> current = list.Head;

            while (current != null)
            {
                Console.WriteLine(current.Data);
                current = current.Next;
            }

            DoubleLinkedList <string> dlinked = new DoubleLinkedList <string>();

            dlinked.Append("双向1");
            dlinked.Append("双向2");
            dlinked.Append("双向3");
            dlinked.Append("双向4");
            //dlinked.Insert("插入双向44", 4);
            Console.WriteLine($"双向链表总长度为:{dlinked.Length()}");
            dlinked.Delete("双向4");
            DLinkedNode <string> d = dlinked.First;

            while (d != null)
            {
                Console.WriteLine(d.Data);
                d = d.Tail;
            }

            Console.WriteLine($"查找目标:{dlinked.Select(34).Data}");

            Console.WriteLine($"求16的平方根{t1.Sqrt(16)}");

            int t    = 2;
            int tail = 3;

            Console.WriteLine(t != (t = tail));

            t1.HashM();
            Console.ReadLine();
        }