Hier ein einfaches Beispiel einer Linked List mit Funktionen zum Einfügen, Suchen, Bearbeiten und Löschen.
#include <stdio.h>
#include <stdlib.h>
// Struktur für ein Listenknoten
typedef struct Node {
int data;
struct Node* next;
} Node;
// Funktion zum Erstellen eines neuen Knotens
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Fehler: Speicher konnte nicht allokiert werden.\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// Funktion zum Einfügen eines neuen Knotens am Anfang der Liste
Node* insertNode(Node* head, int data) {
Node* newNode = createNode(data);
if (head == NULL) {
head = newNode;
} else {
newNode->next = head;
head = newNode;
}
printf("Knoten mit Wert %d wurde eingefügt.\n", data);
return head;
}
// Funktion zum Suchen eines Knotens mit gegebenem Wert
Node* searchNode(Node* head, int data) {
Node* currentNode = head;
while (currentNode != NULL) {
if (currentNode->data == data) {
printf("Knoten mit Wert %d wurde gefunden.\n", data);
return currentNode;
}
currentNode = currentNode->next;
}
printf("Knoten mit Wert %d wurde nicht gefunden.\n", data);
return NULL;
}
// Funktion zum Löschen eines Knotens mit gegebenem Wert
Node* deleteNode(Node* head, int data) {
Node* currentNode = head;
Node* prevNode = NULL;
while (currentNode != NULL) {
if (currentNode->data == data) {
if (prevNode == NULL) {
head = currentNode->next;
} else {
prevNode->next = currentNode->next;
}
printf("Knoten mit Wert %d wurde gelöscht.\n", data);
free(currentNode);
return head;
}
prevNode = currentNode;
currentNode = currentNode->next;
}
printf("Knoten mit Wert %d wurde nicht gefunden und konnte nicht gelöscht werden.\n", data);
return head;
}
// Funktion zum Ändern des Werts eines Knotens mit gegebenem Wert
void modifyNode(Node* head, int data, int newData) {
Node* node = searchNode(head, data);
if (node != NULL) {
node->data = newData;
printf("Wert des Knotens mit Wert %d wurde zu %d geändert.\n", data, newData);
} else {
printf("Knoten mit Wert %d konnte nicht gefunden und nicht geändert werden.\n", data);
}
}
// Funktion zum Anzeigen der gesamten Liste
void displayList(Node* head) {
Node* currentNode = head;
if (currentNode == NULL) {
printf("Die Liste ist leer.\n");
} else {
printf("Liste: ");
while (currentNode != NULL) {
printf("%d ", currentNode->data);
currentNode = currentNode->next;
}
printf("\n");
}
}
// Funktion zum Freigeben des Speichers der gesamten Liste
void freeList(Node* head) {
Node* currentNode = head;
Node* tempNode = NULL;
while (currentNode != NULL) {
tempNode = currentNode;
currentNode = currentNode->next;
free(tempNode);
}
}
int main() {
Node* head = NULL;
head = insertNode(head, 10);
head = insertNode(head, 20);
head = insertNode(head, 30);
displayList(head);
searchNode(head, 20);
searchNode(head, 40);
head = deleteNode(head, 20);
displayList(head);
modifyNode(head, 10, 50);
displayList(head);
freeList(head);
return 0;
}
Hier noch ein Beispiel auf GDB Online.