#include "list2.h" #include #include List::List() { head = NULL; } Node *List::firstnode() { return head; } void List::insertfront(Type x) { Node *p; p = Node::mynew(); assert(p); p->setinfo(x); p->setnext(head); head = p; } void List::insertend(Type x) { Node *p, *q; p = Node::mynew(); assert(p); p->setinfo(x); q = findlast(); if (q == NULL) head = p; else q->setnext(p); } void List::insertafter(Type x, Node *p) { Node *q; assert (p); q = Node::mynew(); assert (q); q->setinfo(x); q->setnext(p->getnext()); p->setnext(q); } Type List::removefront() { Node *p; Type x; assert(!isempty()); p = head; x = p->getinfo(); head = p->getnext(); Node::mydelete(p); return x; } Type List::removeafter(Node *p) { Type x; Node *q; assert(p); q = p->getnext(); assert(q); x = q->getinfo(); p->setnext(q->getnext()); Node::mydelete(q); return x; } Type List::removeend() { Node *p,*q; p = head; q = NULL; while (p && p->getnext()!=NULL){ q = p; p = p->getnext(); } if (q == NULL) return(removefront()); else return(removeafter(q)); } int List::isempty() { return (head == NULL); } Node *List::findlast() { Node *p; if (isempty()) return NULL; p = head; while (p->getnext()!=NULL) p = p->getnext(); return p; } void List::print() { Node *p; p = head; while (p){ cout << p->getinfo(); cout << ' '; p = p->getnext(); } cout << endl; } List::~List() { Node *p, *q; p = head; while (p) { q = p; p = p->getnext(); Node::mydelete(q); } head = NULL; } int List::find(Type x) { Node *p; p = head; while (p) { if (p->getinfo() == x) return 1; p = p->getnext(); } return 0; }