public void InsertSorted(object value) { if (Head == null) { Head = new Node {Value = value}; Head.Next = Head; } else { if ((int)value < (int)Head.Value) { //when value is smaller than head, make a copy of the head and set head's value to the new value, then change the head var headCopy = new Node {Next = Head.Next, Value = Head.Value}; Head.Next = headCopy; Head.Value = value; } else { var currentItem = Head; while (currentItem.Next != Head && (int)currentItem.Next.Value <= (int)value) { currentItem = currentItem.Next; } currentItem.Next = new Node {Next = currentItem.Next, Value = value}; } } }
public void ConvertToBst() { Node one = new Node { Value = 1 }; Node two = new Node { Value = 2 }; Node three = new Node { Value = 3 }; Node four = new Node { Value = 4 }; Node five = new Node { Value = 5 }; Node six = new Node { Value = 6 }; one.Next = two; two.Next = three; three.Next = four; four.Next = five; five.Next = six; LinkedList list = new LinkedList { Head = one }; TreeNode<int> bst = list.ConvertToBst<int>(); Assert.AreEqual(3, bst.Value); Assert.AreEqual(1, bst.Left.Value); Assert.AreEqual(2, bst.Left.Right.Value); Assert.AreEqual(5, bst.Right.Value); Assert.AreEqual(4, bst.Right.Left.Value); Assert.AreEqual(6, bst.Right.Right.Value); }
public void FalseLinkedListOneItem() { var list = new CircularLinkedList(); var head = new Node { Value = 1 }; list.Head = head; Assert.IsFalse(list.Detect()); }
public void FalseLinkedListMultipleItems() { var list = new CircularLinkedList(); var second = new Node { Value = 2 }; var head = new Node { Value = 1, Next = second }; list.Head = head; Assert.IsFalse(list.Detect()); }
public void RemoveMultiple() { var tail = new Node { Value = 3 }; var elementOne = new Node { Value = 1, Next = tail }; var elementTwo = new Node { Value = 1, Next = elementOne }; var head = new Node { Value = 2, Next = elementTwo }; var list = new LinkedList { Head = head }; list.Remove(1); Assert.IsNotNull(list.Head); Assert.AreSame(head, list.Head); Assert.AreSame(tail, head.Next); }
public void InsertAtEnd(object value) { if (Head == null) { //handle null head Head = new Node { Value = value }; Head.Next = Head; } else { var headCopy = new Node { Next = Head.Next, Value = Head.Value }; Head.Next = headCopy; Head.Value = value; //don't forget to reset the head back to the copy Head = headCopy; } }
public void WhenIsTailElement() { var tail = new Node { Value = 1 }; var list = new LinkedList { Head = new Node { Value = 2, Next = tail } }; list.Remove(1); Assert.IsNotNull(list.Head); Assert.IsNull(list.Head.Next); }
public void WhenIsHeadElementAndNext() { var other = new Node { Value = 2 }; var next = new Node { Value = 1, Next = other }; var list = new LinkedList { Head = new Node { Value = 1, Next = next } }; list.Remove(1); Assert.IsNotNull(list.Head); Assert.AreSame(other, list.Head); }
public void ReverseTwoItems() { var second = new Node(); var head = new Node { Next = second }; var list = new LinkedList { Head = head }; list.Reverse(); Assert.IsNotNull(list.Head); Assert.AreSame(second, list.Head); Assert.AreSame(head, second.Next); }
public void TrueLoopAtTheEnd() { var list = new CircularLinkedList(); var third = new Node {Value = 3}; var second = new Node { Value = 2, Next = third }; var head = new Node { Value = 1, Next = second }; third.Next = second; list.Head = head; Assert.IsTrue(list.Detect()); }