#include #include List::List() { head = NIL; list_length = 0; } List::List(char *datum) { Node *temp = new Node(datum); head = temp; list_length = 1; } inline Node *List::get_head() { return(head); } inline Node *List::set_head(Node *new_head) { Node *_old_head = head; head = new_head; return(_old_head); } inline int List::get_length() { return(list_length); } inline int List::set_length(int new_length) { int _old_length = list_length; list_length = new_length; return(_old_length); } List *List::cons(char *datum) { List *retval = new List; Node *temp = new Node(datum); temp->set_next(head); retval->set_head(temp); retval->set_length(list_length + 1); return(retval); } inline int List::length() { return(list_length); } int List::traverse() { Node *current_node; for (current_node = head; current_node != NIL; current_node = current_node->get_next()) { // pretty print current_node->get_datum() } return(list_length); } inline char *List::car() { return(head->get_datum()); } List *List::cdr() { List *retval = new List; retval->set_head(head->get_next()); retval->set_length(list_length - 1); return(retval); } List *List::append(List *second) { List *retval = new List; Node *last = head, *new_stuff, *temp; // Replace this by a copy method???? if (last != NIL) { new_stuff = new Node(last->get_datum()); retval->set_head(new_stuff); } while (last->get_next() != NIL) { last->set_next(last->get_next()); temp = new Node(last->get_datum()); new_stuff->set_next(temp); new_stuff = temp; } last = second->get_head(); if (last != NIL) { temp = new Node(last->get_datum()); new_stuff->set_next(temp); new_stuff = temp; } while (last->get_next() != NIL) { last->set_next(last->get_next()); temp = new Node(last->get_datum()); new_stuff->set_next(temp); new_stuff = temp; } retval->set_length(list_length + second->get_length()); return(retval); }