#include <iostream>
#include <string>

using namespace std;

class ArrivalList
{
    private:
        struct Arrival
        {
            string arrAddress;
            double distance;
            string roadCategory;
            Arrival* next;
        };

        Arrival* head;

        ArrivalList(const ArrivalList&) {}
        ArrivalList& operator=(const ArrivalList&) { return *this; }

    public:

        ArrivalList();
        ~ArrivalList();

        bool addArrival(string oneAddress, double distance, string roadCategory);

		void print() const;
};

ArrivalList::ArrivalList() : head(NULL) {}

ArrivalList::~ArrivalList()
{
    Arrival* current = head;
    while (current)
    {
        Arrival* temp = current->next;
        delete current;
        current = temp;
    }
}

bool ArrivalList::addArrival(string oneAddress, double distance, string roadCategory)
{
	Arrival** current = &head;

	while ((*current != NULL) && (oneAddress >= (*current)->arrAddress))
		current = &((*current)->next);

	Arrival* temp = new Arrival;
	temp->arrAddress = oneAddress;
	temp->distance = distance;
	temp->roadCategory = roadCategory;
	temp->next = *current;

    *current = temp;

    return true;
}

void ArrivalList::print() const
{
	if (head)
	{
		Arrival* current = head;
		while (current)
		{
			cout << current->arrAddress << ' ';
			current = current->next;
		}
		cout << endl;
	}
	else
	{
		cout << "(empty)" << endl;
	}
}

int main()
{
    ArrivalList li;
	li.print();

    li.addArrival("jjjjj",0.8999,"I");
	li.print();

    li.addArrival("aaaaa",0.888,"k");
	li.print();

	li.addArrival("lllll",0.888,"k");
	li.print();

	li.addArrival("kkkkk",0.888,"k");
	li.print();
}
