All pastes #931247 Raw Edit

Miscellany

public c v1 · immutable
·published 2008-03-07 01:28 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>#include "linkedlist.h"int main() {	LIST *list = ListNew();	char *str1 = "Hello World";	char *str2 = "Welcome to Atlantis";	char *str3 = "Lorem Ipsum";	AddFirst(list, str1);	AddLast(list, str2);	AddFirst(list, str3);	while(list->size > 0) {		printf("%s\n", RemoveFirst(list));	}	return EXIT_SUCCESS; }NODE *NodeNew(void *data) {	NODE *node;	if(!( node = malloc(sizeof(NODE))))		return NULL;	node->next = NULL;	node->prev = NULL;	node->data = data;	return node;}LIST *ListNew(void) {	LIST *list;	if(!(list = malloc(sizeof(LIST))))		return NULL;	list->head = NULL;	list->tail = NULL;	list->size = 0;	return list;}void AddFirst(LIST *list, void *data) {	NODE *node = NodeNew(data);	if(list->head == NULL) {		list->head = node;		list->tail = node;		list->size++;	} else {		list->head->prev = node;		node->next = list->head;		list->head = node;		list->size++;	}}void AddLast(LIST *list, void *data) {	NODE *node = NodeNew(data);	if(list->tail == NULL) {		list->head = node;		list->tail = node;		list->size++;	} else {		list->tail->next = node;		node->prev = list->tail;		list->tail = node;		list->size++;	}}void *RemoveFirst(LIST *list) {	if(list->head == NULL)		return NULL;	NODE *node = list->head;	if(node->next == NULL) {		list->head = NULL;		list->tail = NULL;		list->size--;		void *retval = node->data;		free(node);		return retval;	}	list->head = node->next;	list->head->prev = NULL;	list->size--;	void *retval = node->data;	free(node);	return retval;}