Jak usunąć węzeł na połączonej liście C ++

Jak usunąć węzeł na połączonej liście C ++
Połączona lista to w zasadzie kombinacja dwóch rzeczy: części informacji i części adresowej. Część adresowa, zwana również linkiem wskaźnika lub następnego węzła, przechowuje adres następnego węzła. Połączona lista to w zasadzie liniowa struktura danych, która przechowuje dane dynamicznie za pośrednictwem wskazówek, do których można łatwo uzyskać przez poprzedni wskaźnik węzła.

Węzeł połączonej listy wygląda tak:

W porównaniu z tablicą, połączona lista nie jest sekwencyjną strukturą danych, ponieważ jest dynamicznie przechowywaną strukturą danych. Przechowuje wszystkie dane w różnych lokalizacjach pamięci i możemy uzyskać dostęp do tych danych za pośrednictwem wskaźnika węzła, który przechowuje adres danych.

Ten sposób przechowywania danych ma takie zalety:

1. Nie mamy wstępnie zdefiniowanego rozmiaru pamięci jak tablica, która prowadzi do wielu odpadów pamięci.

2. W tablicy, jeśli zdefiniujemy jednocześnie pamięć, nie możemy jej zmniejszyć ani zwiększyć zgodnie z naszymi wymaganiami. Ale na połączonej liście możemy zwiększyć lub zmniejszyć węzły zgodnie z naszymi wymaganiami.

Lista połączona wygląda tak:

Każda lista połączona ma jeden węzeł nagłówka, który jest pierwszym węzłem z listy połączonej; i jeden węzeł ogonowy, który jest obecny na końcu listy powiązanej. Z węzła ogonowego połączona lista wskazująca na następny węzeł się skończył, ponieważ przechowuje adres zerowy, co nic nie znaczy. Jeśli dowolna lista połączona ma tylko jeden węzeł, oznacza to, że węzeł nagłówka i węzeł ogonowy są takie same.

Usunięcie połączonej listy:

Jak podano poniżej, możemy usunąć węzeł z powiązanej listy na trzy sposoby:

1. Usuń pierwszy węzeł listy powiązanej

2. Usuń ostatni węzeł listy powiązanej

3. Usuń określony węzeł pozycji

Objaśnienie wszystkich tych koncepcji:

Usuń pierwszy węzeł listy połączonej (węzeł nagłówka):-

Usuwanie pierwszego węzła z listy połączonej oznacza usunięcie węzła nagłówka (pierwszy węzeł) z listy połączonej. Aby to zrobić, musimy postępować zgodnie z następującą procedurą:

A. Musimy utworzyć wskaźnik (tymczasowy).

B. Adres węzła nagłówka jest kopiowany do wskaźnika (tymczasowy).

C. Teraz zapisaliśmy adres węzła nagłówka. Możemy więc zadeklarować następny węzeł nagłówka jako pierwszego węzła z listy połączonej.

Usuwanie pierwszego węzła oznacza, że ​​węzeł nagłówka jest prosty:

Kod C ++, aby usunąć pierwszy węzeł z listy powiązanej:

void DeleLinkedListFirstNode ()

węzeł *tymczasowyNode = nowy węzeł;
tymczasowyNode = headNode;
HeadNode = HeadNode-> następny;
Usuń tymczasowy styl;

Usuwanie ostatniego węzła (węzeł ogonowy):

Usunięcie węzła nagłówka Listy Listy było proste. Ale kiedy chcieliśmy usunąć ostatni węzeł linkowanej listy, musimy przenieść wskaźnik zerowy z węzła ogona do poprzedniego węzła ogona, który ma adres węzła ogona.

Aby to zaimplementować, musimy użyć dwóch tymczasowych węzłów i uruchomić linkę. Po zakończeniu listy połączonej przemieszczania, jeden tymczasowy węzeł wskazuje na bieżący węzeł, a drugi tymczasowy węzeł wskazuje na poprzedni węzeł. Teraz oba wymagane węzły odnoszą się do posiadanych szczegółów i możemy usunąć węzeł ogonowy podczas przenoszenia wskaźnika zerowego do poprzedniego węzła.

Kod C ++, aby usunąć ostatni węzeł z listy powiązanej:

void DeleTeLinkedListlastNode ()

node *currentNode = nowy węzeł;
węzeł *poprzedniNode = nowy węzeł;
currentNode = HeadNode;
while (currentNode-> następny!= Null)

poprzedniNode = currentNode;
current = currentNode-> następny;

ogon = poprzedniNode;
poprzedniNode-> następny = null;
usuń prąd prądowy;

Usuwanie węzła w określonej pozycji:

Aby usunąć węzeł z dowolnego miejsca na połączonej liście, musimy wprowadzić konkretną pozycję węzła, którą chcemy usunąć. Aby zdefiniować określony węzeł pozycji, używamy dwóch tymczasowych węzłów, tak jak robiliśmy to podczas usuwania węzła ogona. Przemierzamy całą listę połączoną, dopóki nie otrzymamy konkretnego węzła pozycji, który chcemy usunąć, a po otrzymaniu tego węzła drugi węzeł tymczasowy pomieści poprzedni adres bieżącego węzła. Teraz, ponieważ mamy oba szczegóły węzłów, możemy łatwo przenieść adres z węzła usuwania do poprzedniego węzła adresu, który teraz wskazuje na następny węzeł, tak jak w poprzedniej usuniętej metodzie ostatniego węzła.

Kod C ++, aby usunąć węzeł nth z listy powiązanej:

void deleTentHpositionNode (int pozycja pozycja)
node *currentNode = nowy węzeł;
węzeł *poprzedniNode = nowy węzeł;
currentNode = HeadNode;
dla (int count = 1; ipoprzedniNode = currentNode;
currentNode = currentNode-> następny;

poprzedniNode-> następny = currentNode-> następny;

Program C ++ do usunięcia węzła n -th z listy powiązanej

#włączać
za pomocą przestrzeni nazw Std;
klasa LinkedListNode
publiczny:
Int Info;
linkedListNode *wskaźnik;
;
int LenderCalculate (węzeł LinkedListNode*)
int count = 0;
While (węzeł!= Null)
node = node-> wskaźnik;
count ++;

powrót;

void insert (linkedListNode ** HeadNode, int info)
LinkedListNode* newNode = new LinkedListNode ();
newNode-> info = info;
newNode-> wskaźnik = *headnode;
*headNode = newNode;

void DeleTenodemethod (int liczba, linkedListNode ** headnode)
LinkedListNode * tymczasowyNode = * headNode;
LinkedListNode* poprzedniNode;
int długość = LongCalculate (*headnode);
if (liczba < 1 || count > długość)
Cout << "Deletion of linked list node is not valid" << endl;
powrót;

// ten fucntion usunie pierwszy węzeł z listy powiązanej
if (count == 1)
*HeadNode = (*HeadNode)-> wskaźnik;
Cout << temporaryNode->informacje << " deleted the linked first node" << endl;
delete (tymczasowyNode);
powrót;

// to, gdy pętla zatrzyma się, gdy zostanie osiągnięta na
// Koniec listy połączonej
while (--Count)
poprzedniNode = tymczasowyNode;
tymczasowyNode = tymczasowyNode-> wskaźnik;

// Ten wiersz zaktualizuje poprzedni wskaźnik Node
// z nodą wskaźnikiem węzłów nodowych n
poprzedniNode-> wskaźnik = tymczasowyNode-> wskaźnik;
// Ten kod usunie węzeł nth z listy powiązanej
Cout << temporaryNode->informacje << " deleted" << endl;;
delete (tymczasowyNode);

void displayLinkedList (linkedListNode* item)
Cout << "\nDisplaying LinkedList => : ";
// Ten warunek zatrzyma się, gdy LinkedList osiągnie na końcu
When (przedmiot!= Null)
Cout << item->informacje << " ";
item = item-> wskaźnik;

Cout << endl;

int main ()
LinkedListNode* HeadNode = null;
wstaw (i headnode, 29);
wstaw (i headnode, 34);
wstaw (i headnode, 23);
wstaw (i headnode, 27);
wstaw (i headnode, 31);
wstaw (i headnode, 50);
displayLinkedList (HeadNode);
Cout << "\n Deleting node number 3 = ";
Deletenodemetod (3 i headnode);
Cout << "\n After delete node number 3, linked list will be =";
displayLinkedList (HeadNode);
Cout << "\n Deleting node number 5 = ";
Deletenodemetod (5 i headnode);
Cout << "\n After delete node number 5, linked list will be =";
displayLinkedList (HeadNode);
powrót 0;

Wyjście:

Wyświetlanie LinkedList =>: 50 31 23 23 34 29
Usunięcie węzła numer 3 = 27 Usunięto
Po usunięciu węzła nr 3, lista połączona będzie =
Wyświetlanie LinkedList =>: 50 31 23 34 29
Usunięcie numeru węzła 5 = 29 Usunięto
Po usunięciu węzła numer 5, lista połączona będzie =
Wyświetlanie LinkedList =>: 50 33 23 34

Wniosek:

Na tym blogu studiowaliśmy różne sposoby usuwania powiązanych koncepcji listy i tego, jak możemy również kodować w programie C ++. Na koniec zbadaliśmy główne koncepcje usuwania węzła z określonej pozycji. Połączone koncepcje listy są zawsze ważne, ponieważ jest to sposób gry z pamięcią systemu operacyjnego i ma wiele korzyści w porównaniu z tablicą.