Lingitud loendi tagurpidi (C++)

Lingitud Loendi Tagurpidi C



Selles LinuxHinti õpetuses on näidatud, kuidas lingitud loendit C++-s ümber pöörata. Kui pöörate lingitud loendi ümber, pööratakse lingi tee ümber ja peast saab saba ja sabast pea. Sõlmede asukohti vahetades saame sellest kiiresti aru. Selles vahetamises muudame lihtsalt sõlmede asukohti vasakult paremale või vastupidi.

lingitud nimekiri: See on lingitud loend, mille tahame tühistada.







Pärast ümberpööratud lingitud loendit: Allpool on tulemus pärast ülaltoodud loendi ümberpööramist.





Ülaltoodud näidisskeemil näeme, et peasõlm ja sabasõlm muudavad lingitud loendi ümberpööramisel oma asukohti. Peasõlm, mis on nüüd sabasõlm, osutab nullsõlmele, kuna see on nüüd sabasõlme.





Algoritmi sammud

  1. Loome põhimeetodi ja deklareerime mõned nõutavad muutujad.
  2. Seejärel on meie järgmine samm luua meetod, mis võimaldab luua lingitud loendi. See meetod aitab meil luua lingitud loendi.
  3. Järgmine samm on luua meetod lingitud loendi ümberpööramiseks. Selle meetodi puhul edastame kogu lingitud loendi ja see meetod muudab lingitud loendi ümber.
  4. Nüüd vajame teist meetodit, et kuvada tulemus pärast selle ümberpööramist.
  5. Me ühendame kõik need ülaltoodud meetodid oma põhimeetodiks.

Selgitame ümberpööratud lingitud loendit mõne pildilise vormi abil, et seda oleks lihtsam mõista. Nii et alustame näitega.

Allpool on lingitud loend, mida tahame tühistada.



Samm 1 . Rohelist värvi sõlm on peasõlm, mis osutab käivitamise esimesele sõlmele.

2. samm. Järgmises etapis läbime kogu lingitud loendi, kuni me ei saa päisesõlme kõrvale null-osutit. Selleks anname järgmisele sõlmele ajutise nime, nagu on näidatud alloleval diagrammil.

3. samm. Kuna meil on uus võrdlussõlm nimega 'ajutine', mis aitab meil läbida kogu lingitud loendi, kuni me ei saa null-osutit, saame määrata päisesõlme järgmise lingi nulliks, mis ei mõjuta lingitud loendit. loetelu, nagu on näidatud alloleval diagrammil. Nullkursorit praeguse sõlme kõrval nimetatakse eelmiseks sõlmeks.

4. samm. Nüüd teisaldame ajutise sõlme järgmisse sõlme ja praeguse sõlme eelmisesse ajutisse sõlme. Nüüd oleme liikunud järgmise sõlme juurde. Samuti muudame eelmise sõlme nullist praeguse sõlme eelmiseks sõlmeks. Nii et nüüd hoolitseb ajutine sõlm kõigi nullkursorini liikumiste eest, et saaksime määrata praeguse sõlme lingi eelmise sõlmega ja nüüd osutab see eelmisele sõlmele, nagu on näidatud alloleval diagrammil.

Järgime samu samme ja lõpuks saame vastupidise lingitud loendi.

5. samm .

6. samm.

7. samm.

8. samm.

9. samm.

10. samm.

11. samm.

12. samm.

13. samm.

14. samm. Selles etapis muutus meie lingitud loend vastupidiseks.

Programm C++ lingitud loendi ümberpööramiseks

#include
kasutades nimeruum std ;

// Sõlme loomise meetod
struktuur sõlm {
int väärtus ;
sõlm * nextNodePtr ;
} * nodeObject ;

tühine looLinkedList ( int n ) ;
tühine reverseLinkedList ( sõlm ** nodeObject ) ;
tühine kuva ( ) ;

int peamine ( ) {
int n,väärtus,üksus ;
cout << 'Mitu sõlme soovite luua =>: ' ;
söömine >> n ;
looLinkedList ( n ) ;
cout << ' \n Teave lingitud loendis: \n ' ;
kuva ( ) ;
cout << ' \n Lingitud loend pärast ümberpööramist \n ' ;
reverseLinkedList ( & nodeObject ) ;
kuva ( ) ;
tagasi 0 ;
}
// See meetod loob lingitud loendi
tühine looLinkedList ( int n ) {
struktuur sõlm * frontNode, * tempNode ;
int väärtus, st ;

nodeObject = ( struktuur sõlm * ) malloc ( suurus ( struktuur sõlm ) ) ;
kui ( nodeObject == NULL )
cout << 'Mälu lisamiseks ei piisa' ;
muidu {
cout << 'Palun sisestage sõlme 1 teave (ainult number):' ;
söömine >> väärtus ;
nodeObject - > väärtus = väärtus ;
nodeObject - > nextNodePtr = NULL ;
tempNode = nodeObject ;

jaoks ( i = kaks ; i <= n ; i ++ ) {
frontNode = ( struktuur sõlm * ) malloc ( suurus ( struktuur sõlm ) ) ;

// Kui lingitud loendis pole ühtegi sõlme
kui ( frontNode == NULL ) {
cout << 'Mälu ei saa eraldada' ;
murda ;
}
muidu {
cout << 'Palun sisestage sõlme teave' << i << ':' ;
söömine >> väärtus ;
frontNode - > väärtus = väärtus ;
frontNode - > nextNodePtr = NULL ;
tempNode - > nextNodePtr = frontNode ;
tempNode = tempNode - > nextNodePtr ;
}
}
}
}

tühine reverseLinkedList ( sõlm ** nodeObject ) {
struktuur sõlm * tempNode = NULL ;
struktuur sõlm * eelmineSõlm = NULL ;
struktuur sõlm * praeguneSõlm = ( * nodeObject ) ;
samal ajal ( praeguneSõlm ! = NULL ) {
tempNode = praeguneSõlm - > nextNodePtr ;
praeguneSõlm - > nextNodePtr = eelmineSõlm ;
eelmineSõlm = praeguneSõlm ;
praeguneSõlm = tempNode ;
}
( * nodeObject ) = eelmineSõlm ;
}
tühine kuva ( ) {
struktuur sõlm * tempNode ;
kui ( nodeObject == NULL ) {
cout << 'Lingitud loend on tühi' ;
}
muidu {
tempNode = nodeObject ;
samal ajal ( tempNode ! = NULL )
{
cout << tempNode - > väärtus << ' \t ' ;
tempNode = tempNode - > nextNodePtr ;
}
}
cout << endl ;
}

Väljund

Mitu sõlme soovite luua =>: 6
Sisestage sõlme 1 teave (ainult number): 101
Sisestage sõlme 2 teave: 95
Sisestage sõlme 3 teave: 61
Sisestage sõlme 4 teave: 19
Sisestage sõlme 5 teave: 12
Sisestage sõlme 6 teave: 11

Teave lingitud loendis:
101 95 61 19 12 11

Lingitud loend pärast ümberpööramist
11 12 19 61 95 101

Järeldus

Selles LinuxHinti artiklis on vaadatud, kuidas lingitud loendit C++-s ümber pöörata. Lingitud loendi tühistamiseks on ka teisi meetodeid, kuid see on väga levinud meetod lingitud loendi tühistamiseks. See on teie otsustada, kuidas soovite oma probleeme lahendada, kuid üldiselt peaks pöördlingitud loendi funktsioon olema lihtne kursori vahetustega silmus.