KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Going through classic data structures and have stopped on linked lists.Just implemented a circular singly-linked list, but I'm under overwhelming impression that this list could be expressed in a more elegant manner, remove_node function in particular. Keeping in mind efficiency and code readability, could anybody present a more concise and efficient solution for singly-linked circular list? #include <stdio.h> #include <stdlib.h> struct node{ struct node* next; int value; }; struct list{ struct node* head; }; struct node* init_node(int value){ struct node* pnode; if (!(pnode = (struct node*)malloc(sizeof(struct node)))){ return NULL; } else{ pnode->value = value; } return pnode; } struct list* init_list(){ struct list* plist; if (!(plist = (struct list*)malloc(sizeof(struct list)))){ return NULL; } plist->head = NULL; return plist; } void remove_node(struct list*a plist, int value){ struct node* current, *temp; current = plist->head; if (!(current)) return; if ( current->value == value ){ if (current==current->next){ plist->head = NULL; free(current); } else { temp = current; do { current = current->next; } while (current->next != plist->head); current->next = plist->head->next; plist->head = current->next; free(temp); } } else { do { if (current->next->value == value){ temp = current->next; current->next = current->next->next; free(temp); } current = current->next; } while (current != plist->head); } } void print_node(struct node* pnode){ printf("%d %p %p\n", pnode->value, pnode, pnode
Tags (comma-separated)
Save Edits
Cancel