#include <iostream>
using namespace std;
#define element int
struct ListNode
{
element value;
struct ListNode* next;
ListNode(element x) :value(x), next(nullptr)
{}
};
struct LinkedList
{
private:
ListNode* head;
int size;
public:
LinkedList()
:head(nullptr)
, size(0)
{}
~LinkedList();
void insert(int i, element x);
void remove(int i);
ListNode* find(element value);
ListNode* get(int i);
void update(int i, element x);
void print();
};
LinkedList::~LinkedList()
{
while (head)
{
ListNode* temp = head;
head = temp->next;
delete temp;
}
}
void LinkedList::insert(int i, element x)
{
if (i<0 || i>size)
{
throw out_of_range("Invalid Index");
}
ListNode* newnode = new ListNode(x);
if (i == 0)
{
newnode->next = head;
head = newnode;
}
else
{
ListNode* cur = head;
for (int j = 0; j < i - 1; j++)
{
cur = cur->next;
}
newnode->next = cur->next;
cur->next = newnode;
}
size++;
}
void LinkedList::remove(int i)
{
if (i<0 || i>size)
{
throw out_of_range("Invalid Index");
}
if (i == 0)
{
ListNode* temp = head;
head = head->next;
delete temp;
}
else
{
ListNode* cur = head;
for (int j = 0; j < i-1; j++)
{
cur = cur->next;
}
ListNode* temp = cur->next;
cur->next = temp->next;
delete temp;
}
--size;
}
ListNode* LinkedList::find(element value)
{
ListNode* cur = head;
while (cur||cur->value!=value)
{
cur = cur->next;
}
return cur;
}
ListNode* LinkedList::get(int i)
{
if (i<0 || i>size)
{
throw out_of_range("Invalid Index");
}
ListNode* cur = head;
for (int j = 0; j < i; j++)
{
cur = cur->next;
}
return cur;
}
void LinkedList:: update(int i, element x)
{
get(i)->value = x;
}
void LinkedList::print()
{
ListNode* cur = head;
while(cur)
{
cout << cur->value << " ";
cur = cur->next;
}
cout << endl;
}
单链表的增删改查
最新推荐文章于 2025-07-13 22:55:33 发布