From 0a38c1d70ab5e9e93ddd406c6bef4a34f084b903 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 4 Sep 2020 08:34:03 +0200 Subject: neue Funktionen: list_insert-/list_delete_next zum Einfügen oder Entfernen des nächsten Elementes einer Liste MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- list-tail-node.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/list-tail-node.c b/list-tail-node.c index c939b8d..158fae8 100644 --- a/list-tail-node.c +++ b/list-tail-node.c @@ -89,6 +89,50 @@ list_pop_front(struct list *list, T *data) } } +void +list_insert_next(struct list *list, struct list_node *node, T data) +{ + if ( node == NULL ) { // Am Anfang einfügen + list_push_front(list, data); + } + else { + struct list_node *new_node = create_node(node->next, data); + + if ( new_node != NULL ) { + if ( node->next == NULL ) { // Am Ende einfügen + list->tail = new_node; + } + node->next = new_node; + } + else { + ERROR("out of memory"); + } + } +} + +void +list_delete_next(struct list *list, struct list_node *node, T *data) +{ + if ( node == NULL ) { // Am Anfang entfernen + list_pop_front(list, data); + } + else { + if ( node->next != NULL ) { + struct list_node *old_node = node->next; + node->next = node->next->next; + + if ( node->next == NULL ) { + list->tail = node; + } + + if ( data != NULL ) { + *data = old_node->data; + } + free(old_node); + } + } +} + bool list_empty(struct list *list) { -- cgit v1.3