Skip to content

Instantly share code, notes, and snippets.

@hgiefers
Last active December 10, 2021 13:24
Show Gist options
  • Save hgiefers/b19e18ac145227ca6139f4a7f2be9263 to your computer and use it in GitHub Desktop.
Save hgiefers/b19e18ac145227ca6139f4a7f2be9263 to your computer and use it in GitHub Desktop.
C Linked List
#include <stdio.h>
#include <stdlib.h>
/**
* Datenstruktur für ein Element ("node")
* der verketteten Liste.
*/
typedef struct node
{
/* Ein Daten-Element vom Typ int */
int data;
/* Ein Zeiger auf ein weiteres Element vom Typ node */
struct node *next;
} node_t;
/**
* Erzeuge einen neuen Knoten
*
* @param val ist der Wert des Daten-Elements im neuen Knoten
* @return Es wird ein Zeiger auf den neuen Knoten zurückgegeben.
*/
node_t *new_node(int val){
node_t *node = (node_t*) malloc(sizeof(node_t));
node->data = val;
node->next = NULL;
return node;
}
/**
* Erzeuge einen neuen Knoten und hänge
* ihn ans Ende der Liste an
*
* @param head ist ein Zeiger auf das erste Element der Liste
* @param val ist der Wert des Daten-Elements im neuen Knoten
*/
void append_node(node_t *head, int val){
node_t *curr = head;
if(head==NULL){
printf("Error: Leere Liste");
return;
}
/**
* Laufe bis zum letzten Element der Liste.
* Dass man beim letzten Element angekommen ist,
* erkennt man daran, dass der next-Zeiger auf Null zeigt,
* also das nächste Element nicht vorhanden ist.
*/
while(curr->next!=NULL){
curr = curr->next;
}
/* Neues Element erzeugen */
node_t *newnode = new_node(val);
/**
* und das vormals letzte Element ("curr")
* auf das neue Element zeigen lassen
*/
curr->next = newnode;
}
/**
* Liste ausgeben
*
* @param head ist ein Zeiger auf das erste Element der Liste
*/
void print_list(node_t *head){
node_t *curr = head;
while(curr!=NULL){
printf("%d -> ", curr->data);
curr = curr->next;
}
printf("NULL\n");
}
/**
* Funktion zum Testen der Linked List
*/
void linkedlist() {
node_t *head = new_node(1);
append_node(head, 2);
append_node(head, 3);
append_node(head, 4);
append_node(head, 5);
print_list(head);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment