Verkettete Listen, Verständnisproblem Pointer setzen
-
Hallo,
ich versuche mich mir verketteten Listen vertraut zu machen. Dies ist die Lösung einer Übungsaufgabe.Könnte mir jemand erklären wie das Listen vermischen genau funktioniert?
Bzw welcher pointer in welchem schritt genau wo hin zeigt?Ich habe den Anfang der betreffenden Zeilen mit roten Smilies markiert. Im Netz finde ich leider keine Erklärung die mir den konkreten Code Schritt für Schritt erklärt.
// Programm zum in einander fügen 2er Listen im Reissverschlussverfahren
#include <stdio.h>
#include <stdlib.h>typedef struct node
{
int key;
struct node *next;
} Node;Node* stackinit (void)
{
Node *tmp;
tmp = (struct nodemalloc (sizeof(Node));
tmp->next = NULL;
tmp->key = 0;
return tmp;
}// Ablegen
void push (int in, Node *listHead)
{
Node *tmp;
tmp = (struct nodemalloc (sizeof *tmp);
tmp->key = in;
tmp->next = listHead->next;
listHead->next = tmp;
}// Auslesen
int pop (Node *listHead)
{
int value;
Node *tmp;
tmp = listHead->next;
listHead->next = tmp->next;
value = tmp->key;
free(tmp);
return value;
}// Gesamte Liste ausgeben
void listOut (Node *list)
{
list = list->next; // Kopfelement ueberspringen
while (list != NULL)
{
printf("%d ", list->key);
list = list->next;
}
printf("\n");
}// Listen vermischen: Einfuegen von Liste 2 in Liste 1
Node* combineLists (Node *head1, Node *head2)
{
Node *tmp1, *tmp2;
tmp1 = head1->next;
tmp2 = head2->next; // Kopfelement von Liste 2 ueberspringenwhile (tmp2 != NULL)
{
head2->next = tmp2->next;
tmp2->next = tmp1->next;
tmp1->next = tmp2;
if (tmp2->next)
tmp1 = tmp2->next;
else
tmp1 = tmp2;
tmp2 = head2->next;
}
free(head2);
return head1;
}
-
-
Nimm mal ein Blatt Papier und Bleistift und zeichne es dir auf.
(Mit Linien und Pfeilen)
-
DasArgh&Du schrieb:
Könnte mir jemand erklären wie das Listen vermischen genau funktioniert?
du erstellst dir eine temporäre liste temp und hängst da abwechselnd das jeweilige element von liste1 und liste2 ran.
das ist alles.
-
Das ist leider nicht sehr hilfreich. Ich habe versucht es mir aufzuzeichnen und bin daran gescheitert. Deshalb hier die Bitte um Erklärung. Wie es theoretisch funktioniert ist klar aber ich verstehe den konkreten code nicht.
-
So allgemein ist es schwierig, genau dein Problem zu finden. Die Zeilen, die du mit rotem Smiley markiert hast, sind einmal eine Variablendeklaration (ist dir die wirklich unklar?!) und das andere ist ein
while(tmp2 != NULL)
- also führe den folgenden Block solange aus, wie tmp2 nicht der Nullpointer ist. Was genau ist an den Zeilen unklar?(und wie gesagt: Code als C-Code formatieren, dann hat man hier allgemein auch mehr als null Lust, sich das anzugucken).