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; }
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; }
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; }
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); }
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); }
public void Clear() { First = null; }
public DLinkedNode() { data = default(T); this.prev = null; this.tail = null; }
public DLinkedNode(T data, DLinkedNode <T> prev, DLinkedNode <T> tail) { this.data = data; this.prev = prev; this.tail = tail; }
public DoubleLinkedList() { First = null; }
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(); }