Lägga till element
För att göra din enkelriktade länkade lista användbar behöver du lägga till noder i den. Du kommer att implementera logiken för att infoga noder i listan. Du kommer att skapa nya noder, koppla ihop dem och integrera dem så att listan växer dynamiskt när du lägger till element.
Detta praktiska tillvägagångssätt hjälper dig att förstå exakt vad som händer bakom kulisserna.
Implementering av nodinfogning
Låt oss skriva en enkel funktion för att skapa en nod. Denna funktion ska:
- Ta ett tal av typen int som argument, vilket kommer att lagras i nodens datafält;
- Skapa en pekare till ett dynamiskt allokerat minnesområde (med hänsyn till nodens storlek);
- Kontrollera att minnesallokeringen för noden lyckas;
- Placera det önskade värdet (funktionsargumentet) i datafältet;
- Nästa pekare måste vara NULL, eftersom funktionen endast skapar en nod;
- Funktionen måste returnera en pekare till minnesområdet där värdet lagras.
Funktionen AddNewNode() tar en pekare till en pekare, eftersom den kan ändra värdet på pekaren till den första (head) noden i listan, samt värdet som ska lagras i den nya noden:
void AddNewNode(struct Node** head, int value)
{
...
}
Om listan är tom (*head == NULL) uppdaterar vi helt enkelt pekaren till listans huvud (*head) så att den pekar på den nya noden (newNode), i vilket fall newNode blir den första noden (huvudnoden). I fallet med en icke-tom lista använder vi en loop för att leta efter den sista noden.
Den aktuella noden fungerar som en buffertnod, med dess hjälp kan vi iterera genom listan och hitta en nod som inte pekar någonstans (*next == NULL).
struct Node* current = *head;
while (current->next != NULL)
{
...
}
Till sist måste du göra den nya noden newNode till den sista noden, vilket innebär att current->next ska vara lika med newNode. Nu är newNode den sista noden i listan.
Som uppgift ska du ta reda på och lägga till en funktion för att lägga till nya noder till befintliga noder.
Swipe to start coding
Skapa en funktion addNewNode som lägger till en ny nod i slutet av en enkel länkad lista.
Inuti funktionen:
- Deklarera en variabel
struct Node* newNodeoch skapa en ny nod medcreateNode(value). - Kontrollera om listan är tom genom att testa
*head == NULL. - Om listan är tom, tilldela
newNodetill*head. - Om listan inte är tom, deklarera
struct Node* currentoch tilldela den till*head. - Gå igenom listan med en
while-loop tillscurrent->nextärNULL. - När sista noden har nåtts, sätt
current->next = newNode.
Lösning
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Can you show me an example of how to use the AddNewNode function?
What should the Node struct look like for this implementation?
Can you explain how memory management works when adding new nodes?
Fantastiskt!
Completion betyg förbättrat till 4.35
Lägga till element
Svep för att visa menyn
För att göra din enkelriktade länkade lista användbar behöver du lägga till noder i den. Du kommer att implementera logiken för att infoga noder i listan. Du kommer att skapa nya noder, koppla ihop dem och integrera dem så att listan växer dynamiskt när du lägger till element.
Detta praktiska tillvägagångssätt hjälper dig att förstå exakt vad som händer bakom kulisserna.
Implementering av nodinfogning
Låt oss skriva en enkel funktion för att skapa en nod. Denna funktion ska:
- Ta ett tal av typen int som argument, vilket kommer att lagras i nodens datafält;
- Skapa en pekare till ett dynamiskt allokerat minnesområde (med hänsyn till nodens storlek);
- Kontrollera att minnesallokeringen för noden lyckas;
- Placera det önskade värdet (funktionsargumentet) i datafältet;
- Nästa pekare måste vara NULL, eftersom funktionen endast skapar en nod;
- Funktionen måste returnera en pekare till minnesområdet där värdet lagras.
Funktionen AddNewNode() tar en pekare till en pekare, eftersom den kan ändra värdet på pekaren till den första (head) noden i listan, samt värdet som ska lagras i den nya noden:
void AddNewNode(struct Node** head, int value)
{
...
}
Om listan är tom (*head == NULL) uppdaterar vi helt enkelt pekaren till listans huvud (*head) så att den pekar på den nya noden (newNode), i vilket fall newNode blir den första noden (huvudnoden). I fallet med en icke-tom lista använder vi en loop för att leta efter den sista noden.
Den aktuella noden fungerar som en buffertnod, med dess hjälp kan vi iterera genom listan och hitta en nod som inte pekar någonstans (*next == NULL).
struct Node* current = *head;
while (current->next != NULL)
{
...
}
Till sist måste du göra den nya noden newNode till den sista noden, vilket innebär att current->next ska vara lika med newNode. Nu är newNode den sista noden i listan.
Som uppgift ska du ta reda på och lägga till en funktion för att lägga till nya noder till befintliga noder.
Swipe to start coding
Skapa en funktion addNewNode som lägger till en ny nod i slutet av en enkel länkad lista.
Inuti funktionen:
- Deklarera en variabel
struct Node* newNodeoch skapa en ny nod medcreateNode(value). - Kontrollera om listan är tom genom att testa
*head == NULL. - Om listan är tom, tilldela
newNodetill*head. - Om listan inte är tom, deklarera
struct Node* currentoch tilldela den till*head. - Gå igenom listan med en
while-loop tillscurrent->nextärNULL. - När sista noden har nåtts, sätt
current->next = newNode.
Lösning
Tack för dina kommentarer!
single