#include <iostream>
#include <stdexcept>
using namespace std;
#define eleType double
//1.define the structure
struct ListNode {
eleType data;
ListNode* next;
ListNode(eleType x) :data(x), next(nullptr){}
};
//2.initialize
class LinkedList {
private:
ListNode* head;
int size;
public:
LinkedList():head(nullptr),size(0){}
~LinkedList();
void insert(int i, eleType value);
void remove(int i);
ListNode* find(eleType value);
ListNode* get(int i);
void update(int i, eleType value);
void print();
};
//3.destructor function
LinkedList::~LinkedList() {
ListNode* curr = head;
while (curr != nullptr) {
ListNode* temp = curr;
curr = curr->next;
delete temp;
}
}
//4.insert
void LinkedList::insert(int i, eleType value) {
if (i<0 || i>size) {
throw std::out_of_range(“Invalid Position”);
}
ListNode* newNode = new ListNode(value);
if (i == 0) {
newNode->next = head;
head = newNode;
}
else {
ListNode* curr = head;
for (int j = 0; j < i – 1; j++) {
curr = curr->next;
}
newNode->next=curr->next;
curr->next = newNode;
}
size++;
}
//5.remove
void LinkedList::remove(int i) {
if (i < 0 || i >= size) {
throw std::out_of_range(“Invalid Position”);
}
ListNode* curr = head;
if (i == 0) {
ListNode* temp = curr;
head=curr->next;
delete temp;
}
else {
for (int j = 0; j < i – 1; j++) {
curr = curr->next;
}
ListNode* temp =curr->next;
curr->next = temp->next;
delete temp;
}
size–;
}
//6.find
ListNode* LinkedList::find(eleType value) {
ListNode* curr = head;
while (curr != nullptr && curr->data != value) {
curr = curr->next;
}
return curr;
}
//7.get
ListNode* LinkedList::get(int i) {
if (i<0 || i>=size) {
throw std::out_of_range(“Invalid Position”);
}
ListNode* curr = head;
for (int j = 0; j < i; j++) {
curr = curr->next;
}
return curr;
}
//8.update
void LinkedList::update(int i, eleType value) {
if (i<0 || i>=size) {
throw std::out_of_range(“Invalid Position”);
}
get(i)->data = value;
}
//9.print
void LinkedList::print() {
ListNode* curr = head;
while (curr) {
cout << curr->data << ” “;
curr = curr->next;
}
cout << endl;
}
int main() {
LinkedList list;
list.insert(0, 10);
list.insert(1, 20);
list.insert(2, 30);
list.insert(3, 40);
list.insert(4, 50);
list.print();
list.remove(2);
list.print();
list.update(0, 555.6);
list.print();
cout << list.find(20)->data<<endl;
cout << list.get(0)->data << endl;
return 0;
}