// SSSortLinkList.cpp // Code for a sorted linked list. #include "SSSortLinkList.h" SSSortLinkList::SSSortLinkList() { head=0; tail=0; lastFound=0; } SSSortLinkList::~SSSortLinkList() { while(head) { Node *victim=head; head=head->next; delete victim; } tail=0; lastFound=0; } void SSSortLinkList::deleteAll() { while(head) { Node *victim=head; head=head->next; delete victim->data; delete victim; } tail=0; lastFound=0; } void SSSortLinkList::add(SubStr *s) { Node *nnode=new Node; nnode->data=s; nnode->next=0; if(head==0) { head=nnode; tail=nnode; } else if(s->compare(*(tail->data))<1) { tail->next=nnode; tail=nnode; } else { Node *rover=head,*prev=0; for(; (rover!=0) && (rover->data->compare(*s)<0); prev=rover,rover=rover->next); if(rover!=0) { if(prev==0) { nnode->next=head; head=nnode; } else { prev->next=nnode; nnode->next=rover; } } else { cout << "Very bad thing happened in add to sorted list!\n"; } } } SubStr *SSSortLinkList::search(const SubStr &s) { Node *rover; if((lastFound!=0) && (lastFound->data->compare(s)>1)) rover=lastFound; else rover=head; for(; rover!=0; rover=rover->next) { if(rover->data->compare(s)==0) { lastFound=rover; return rover->data; } } return 0; } SubStr *SSSortLinkList::search(const string &s) { Node *rover; if((lastFound!=0) && (lastFound->data->compare(s)>1)) rover=lastFound; else rover=head; for(; rover!=0; rover=rover->next) { if(rover->data->compare(s)==0) { lastFound=rover; return rover->data; } } return 0; } void SSSortLinkList::print() const { SSLinkList::print(); }