//Megat Irfan Zackry Bin Ismail
//A20EC0205

#include <iostream>
#include <iomanip>
using namespace std;

//Program 1
class FruitNode {
	private:
		string name;
		float price;
	public:
		FruitNode *next;
		FruitNode(string n, float p) {
		name = n;
		price = p; }
	void getFruitInfo() {
	cout << name << " = RM" << price; }
};
class List {
	private:
		FruitNode *headNode;
	public:
		List() {
	headNode = NULL; }
	void task1(string, float);
	void task2();
	void task3(int, string, float);
	void task4();
};

void List::task1(string n, float p){
	FruitNode *f = new FruitNode(n,p);
	if(headNode==NULL){

		headNode = f;
		f->next = f;
	}
	else{
		FruitNode *ptr = headNode;
		if(ptr==ptr->next){
			
		}
			while(ptr->next!=headNode){
				ptr=ptr->next;
			}
		f->next = headNode;
		headNode = f;
		ptr->next = f;
	}
}

void List::task2(){
	FruitNode *ptr = headNode;
		cout<<"Fruit List\n";
		if(ptr==ptr->next){
			ptr->getFruitInfo();
		}
		else{
		
	while(ptr->next!=headNode){
			ptr->getFruitInfo();
			ptr=ptr->next;
			if(ptr->next!=headNode){
				cout<<" >> ";
			}
}}
cout<<endl<<endl;
}

void List::task3(int i, string n, float p){
	FruitNode *ptr = headNode;
	for (i = 1; i!=p-1; i++){
		ptr = ptr->next;
	}
	FruitNode *ptr2 = ptr->next;
	FruitNode *f = new FruitNode(n,p);
	ptr->next = f;
	f->next = ptr2;
}

void List::task4(){
	FruitNode *ptr = headNode;
	FruitNode *ptrbef = headNode;
	while(ptr->next!=headNode){
		ptrbef = ptr;
		ptr=ptr->next;
	}
	ptrbef->next=headNode;
	delete ptr;
}




int main(){
    List fruitList;

    fruitList.task1("Kiwi", 21.89);
    fruitList.task2();

    fruitList.task1("Apple", 16.50);
    fruitList.task2();

    fruitList.task1("Orange", 16.50);
    fruitList.task2();

    fruitList.task3(2,"Grape", 19.95);
    fruitList.task2();


    fruitList.task4();
    fruitList.task2();

    fruitList.task4();
    fruitList.task2();

    return 0;
}
