#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct node_s{ char *data; struct node_s *next; }node_t; node_t *create(){ node_t *p = calloc(1, sizeof(node_t)); return p; } int insert(node_t *head, const char *data){ node_t *new = create(); if(!new){ return -1; } new->data = strdup(data); new->next = head->next; head->next = new; return 0; } int clear(node_t *head){ node_t *p_next; if(!head){ return -1; } while(head->next != NULL){ p_next = head->next; if(head->data){ free(head->data); } free(head); head=p_next; } return 0; } #define foreach(head, a_unit) for(head = head->next, a_unit = head; head != NULL; head = head->next, a_unit = head) int main(){ node_t *head = create(); insert(head, "a"); insert(head, "b"); insert(head, "c"); node_t *a_unit; foreach(head, a_unit){ printf("%s ", a_unit->data); } clear(head); }