#define TRUE 0
#define FALSE 1
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
typedef struct item{
int val;
struct item *right;
struct item *left;
} Item;
Item *lastItem(Item *parent)
{
Item *prev, *curr;
prev = curr = parent;
while( curr ) {
prev = curr;
curr = curr->right;
}
return prev;
}
Item *firstItem(Item *parent)
{
Item *prev, *curr;
prev = curr = parent;
while( curr ) {
prev = curr;
curr = curr->left;
}
return prev;
}
Item *find(Item *list, int val)
{
Item *ptr;
ptr = firstItem(list);
while( ptr ){
if(ptr->val == val)
return ptr;
ptr = ptr->right;
}
printf("Not in list\n");
return list;
}
Item *append(Item *parent, int val)
{
Item *ptr, *last;
if(parent == NULL){
parent = (Item *) malloc(sizeof(Item));
parent->val = val;
parent->left = NULL;
return(parent);
}
else{
ptr = (Item *) malloc(sizeof(Item));
last = lastItem(parent);
last->right = ptr;
ptr->left = last;
ptr->val = val;
return ptr;
}
}
Item *insert(Item *parent, int val)
{
Item *ptr;
if(parent == NULL){
parent = (Item *) malloc(sizeof(Item));
parent->val = val;
parent->left = NULL;
return(parent);
}
else{
ptr = (Item *) malloc(sizeof(Item));
ptr->right = parent->right;
ptr->left = parent;
ptr->val = val;
(parent->right)->left = ptr;
parent->right = ptr;
return ptr;
}
}
Item *delete(Item *parent, int val)
{
Item *ptr;
if(parent == NULL){
return(parent);
}
else{
parent = find(parent, val);
ptr = parent->right;
(parent->left)->right = ptr;
ptr->left = parent->left;
free(parent);
return ptr;
}
}
void listPrint(Item *list)
{
if( list != NULL) {
listPrint(list->left);
printf("%i -> ", list->val);
}
else
printf("\n");
}
main()
{
Item *list = NULL;
list = append(list, 1);
list = append(list, 2);
list = append(list, 3);
list = append(list, 4);
list = find(list, 2);
list = insert(list, 4);
list = insert(list, 14);
list = insert(list, 14);
list = append(list, 40);
list = delete(list, 3);
listPrint(lastItem(list));
}
syntax highlighted by Code2HTML, v. 0.9.1