//================AddNodeGD - DODAJ WĘZEŁ private void AddNodeGD(int nodeValue, int position) { NodeGD newNode = new NodeGD(); newNode.Value = nodeValue; if (Count != 0) // jeśli lista istnieje { if (position == 0) // DODAJ ELEMENT NA POCZATKU { newNode.Previous = null; newNode.Next = Head; Head.Previous = newNode; Head = newNode; } else if (position == Count) // DODAJ ELEMENT NA KONCU { newNode.Previous = Tail; newNode.Next = null; Tail.Next = newNode; Tail = newNode; } else // DODAJ ELEMENT W SRODKU { NodeGD temp = Head; for (int i = 0; i < position; i++) // przesuwa na wskazana pozycje { temp = temp.Next; } newNode.Next = temp; newNode.Previous = temp.Previous; temp.Previous.Next = newNode; temp.Previous = newNode; } } else { //Console.WriteLine("Lista nie istnieje. Element " + nodeValue + " został dodany na początku listy."); newNode.Previous = null; newNode.Next = null; Head = newNode; Tail = newNode; Head.Previous = Head.Next = Tail.Previous = Tail.Next = null; } Count++; //PrintListGD(ref CurrentNode); // aby umożliwić wypisanie zawartości listy po dodaniu elementu (jeśli odkomentowane - zakomentować wywołanie metody PrintListGD w metodzie ExecuteListGD) }
//================PrintListGD - WYPISZ LISTĘ private void PrintListGD() { Console.Write("Lista od HEAD: "); NodeGD temp1 = Head; while (temp1 != null) // dopóki nie zostanie osiągnięty koniec listy { Console.Write(temp1.Value + " "); // wypisz element listy temp1 = temp1.Next; // i przejdź na następny } Console.WriteLine(); }
//================DeleteNodeGD - USUŃ WĘZEŁ private void DeleteNodeGD(int nodeValue) { bool nodeFound = false; // true, jeśli szukany element znajduje sie na liscie NodeGD temp = Head; while (temp != null) // sprawdzaj dopoki aktualnie sprawdzany węzeł nie jest nullem { if (temp.Value == nodeValue) // jesli wartosc sprawdzanego noda jest rowna szukanej wartosci { if (temp.Previous == null) // jesli znaleziono wartość na początku listy //Console.WriteLine("Element " + nodeValue + " znajdował sie na początku listy i został usunięty."); { temp.Next.Previous = null; Head = temp.Next; } else if (temp.Next == null) // jesli znaleziono wartość na koncu //Console.WriteLine("Element " + nodeValue + " znajdował sie na końcu listy i został usunięty."); { temp.Previous.Next = null; Tail = temp.Previous; } else // jeśli znaleziono wartość w środku listy //Console.WriteLine("Element " + nodeValue + " znajdował sie w środku listy i został usunięty."); { temp.Previous.Next = temp.Next; temp.Next.Previous = temp.Previous; } nodeFound = true; // element wyznaczony do usuniecia znajduje sie na liście Count--; } temp = temp.Next; // przejdz na nastepny węzeł } if (!nodeFound) // jesli elementu wyznaczonego do usuniecia nie ma na liscie { Console.WriteLine("Element " + nodeValue + " nie jest elementem listy i nie może zostać usunięty"); } //PrintListGD(ref CurrentNode, Count); // aby umożliwić wypisanie zawartości listy po usunięciu elementu (jeśli odkomentowane - zakomentować wywołanie metody PrintListGD w metodzie ExecuteListGD) }
public LinkedListGD() { Head = Tail = null; }