public MyLinkedListNode <T> FindLast(T value) //Находит последний узел, содержащий указанное значение { MyLinkedListNode <T> current = tail; while (current != null) { if ((current.Value).Equals(value)) { return(current); } else { current = current.Previous; } } return(null); }
public MyLinkedListNode <T> Find(T value) //Находит первый узел, содержащий указанное значение { MyLinkedListNode <T> current = head; while (current != null) { if ((current.Value).Equals(value)) { return(current); } else { current = current.Next; } } return(null); }
public bool Contains(int searchingContent) { bool finder = false; MyLinkedListNode <T> temp = First; while (temp != null) { if (temp.Content.Equals(searchingContent)) { finder = true; break; } temp = temp.Next; } return(finder); }
public void sort(IComparer <T> comparer) { //будем делегировать запрос на сортировку классу System.Array T[] array = new T[count]; int arrayIndex = 0; this.CopyTo(array, arrayIndex); Array.Sort(array, comparer); MyLinkedList <T> tmp = new MyLinkedList <T>(array); MyLinkedListNode <T> current = this.Head; MyLinkedListNode <T> current_tmp = tmp.Head; while (current != null) { current.Value = current_tmp.Value; current = current.Next; current_tmp = current_tmp.Next; } }
public void Remove(MyLinkedListNode <T> node) { if (node == First) { First = node.Next; First.Previous = null; } else if (node == Last) { Last = node.Previous; Last.Next = null; } else { node.Previous.Next = node.Next; node.Next.Previous = node.Previous; } Count--; }
public void AddBefore(MyLinkedListNode <T> node, T content) { MyLinkedListNode <T> tempNode = new MyLinkedListNode <T>(content); if (node == First) { tempNode.Next = node; node.Previous = tempNode; First = tempNode; } else { tempNode.Next = node; tempNode.Previous = node.Previous; node.Previous.Next = tempNode; node.Previous = tempNode; } Count++; }
public void AddAfter(MyLinkedListNode <T> node, T content) { MyLinkedListNode <T> tempNode = new MyLinkedListNode <T>(content); if (node == Last) { node.Next = tempNode; tempNode.Previous = node; Last = tempNode; } else { tempNode.Next = node.Next; tempNode.Next.Previous = tempNode; node.Next = tempNode; tempNode.Previous = node; } Count++; }
public void AddLast(T contentOfNextItem) { if (First == null) { First = new MyLinkedListNode <T>(contentOfNextItem); Last = First; return; } MyLinkedListNode <T> nextItem = new MyLinkedListNode <T>(contentOfNextItem); if (Last == First) { Last = nextItem; Last.Previous = First; First.Next = Last; } else { Last.Next = nextItem; nextItem.Previous = Last; Last = nextItem; } Count++; }
public void AddAfter(MyLinkedListNode <T> given_node, T value) { MyLinkedListNode <T> new_node = new MyLinkedListNode <T>(value); this.AddAfter(given_node, new_node); }
public static void Test(MyLinkedList <string> sentence) { // Create the link list. Display(sentence, "MyLinkedList: "); Console.WriteLine("sentence.Contains(\"jumps\") = {0}", sentence.Contains("jumps")); // Add the word 'today' to the beginning of the linked list. sentence.AddFirst("today"); Display(sentence, "Test 1: Add 'today' to beginning of the list:"); // Move the first node to be the last node. MyLinkedListNode <string> mark1 = sentence.Head; sentence.RemoveFirst(); sentence.AddLast(mark1); Display(sentence, "Test 2: Move first node to be last node:"); // Change the last node to 'yesterday'. sentence.RemoveLast(); sentence.AddLast("yesterday"); Display(sentence, "Test 3: Change the last node to 'yesterday':"); // Move the last node to be the first node. mark1 = sentence.Tail; sentence.RemoveLast(); sentence.AddFirst(mark1); Display(sentence, "Test 4: Move last node to be first node:"); // Indicate the last occurence of 'the'. sentence.RemoveFirst(); MyLinkedListNode <string> current = sentence.FindLast("the"); IndicateNode(sentence, current, "Test 5: Indicate last occurence of 'the':"); // Add 'lazy' and 'old' after 'the' (the LinkedListNode named current). sentence.AddAfter(current, "old"); sentence.AddAfter(current, "lazy"); IndicateNode(sentence, current, "Test 6: Add 'lazy' and 'old' after 'the':"); // Indicate 'fox' node. current = sentence.Find("fox"); IndicateNode(sentence, current, "Test 7: Indicate the 'fox' node:"); // Add 'quick' and 'brown' before 'fox': sentence.AddBefore(current, "quick"); sentence.AddBefore(current, "brown"); IndicateNode(sentence, current, "Test 8: Add 'quick' and 'brown' before 'fox':"); // Keep a reference to the current node, 'fox', // and to the previous node in the list. Indicate the 'dog' node. mark1 = current; MyLinkedListNode <string> mark2 = current.Previous; current = sentence.Find("dog"); IndicateNode(sentence, current, "Test 9: Indicate the 'dog' node:"); // The AddBefore method throws an InvalidOperationException // if you try to add a node that already belongs to a list. Console.WriteLine("Test 10: Throw exception by adding node (fox) already in the list:"); try { sentence.AddBefore(current, mark1); } catch (InvalidOperationException ex) { Console.WriteLine("Exception message: {0}", ex.Message); } Console.WriteLine(); // Remove the node referred to by mark1, and then add it // before the node referred to by current. // Indicate the node referred to by current. sentence.Remove(mark1); sentence.AddBefore(current, mark1); IndicateNode(sentence, current, "Test 11: Move a referenced node (fox) before the current node (dog):"); // Remove the node referred to by current. sentence.Remove(current); IndicateNode(sentence, current, "Test 12: Remove current node (dog) and attempt to indicate it:"); // Add the node after the node referred to by mark2. sentence.AddAfter(mark2, current); IndicateNode(sentence, current, "Test 13: Add node removed in test 11 after a referenced node (brown):"); // The Remove method finds and removes the // first node that that has the specified value. sentence.Remove("old"); Display(sentence, "Test 14: Remove node that has the value 'old':"); // When the linked list is cast to ICollection(Of String), // the Add method adds a node to the end of the list. sentence.RemoveLast(); ICollection <string> icoll = sentence; icoll.Add("rhinoceros"); Display(sentence, "Test 15: Remove last node, cast to ICollection, and add 'rhinoceros':"); Console.WriteLine("Test 16: Copy the list to an array:"); // Create an array with the same number of // elements as the inked list. string[] sArray = new string[sentence.Count]; sentence.CopyTo(sArray, 0); foreach (string s in sArray) { Console.WriteLine(s); } // Release all the nodes. sentence.Clear(); Console.WriteLine(); Console.WriteLine("Test 17: Clear linked list. Contains 'jumps' = {0}", sentence.Contains("jumps")); Console.WriteLine(); }
public MyLinkedList() { count = 0; head = null; tail = null; }
public void AddFirst(T value) { MyLinkedListNode <T> new_node = new MyLinkedListNode <T>(value); this.AddFirst(new_node); }
public MyLinkedList(MyLinkedListNode <T> tempHead) { First = tempHead; Last = First; Count = 1; }
public void Clear() { First = null; Last = null; Count = 0; }
public void RemoveLast() { Last = Last.Previous; Count--; }
public void RemoveFirst() { First = First.Next; Count--; }