#include<iostream>
using namespace std;
struct LinkNode {
int val;
LinkNode* next;
LinkNode(int x) :val(x), next(nullptr) {};
};
class LinkList {
LinkNode* head;
public:
void print();
void insertathead(int val);//头插
void insertattail(int val);//尾插
void insertrange(int index, int val);
void updateElem(int index, int val);
void deleteElem(int val);//删除元素
bool findElem(int val);
int GetElem(int index);
LinkList() :head(nullptr) {};
~LinkList();
};
void LinkList::print()
{
LinkNode* curr = head;
while (curr) {
cout << curr->val<<" ";
curr = curr->next;
}
}
void LinkList::insertathead(int val)
{
LinkNode* newhead = new LinkNode(val);
newhead->next = head;
head = newhead;
}
void LinkList::insertattail(int val)
{
LinkNode* curr = head;
LinkNode* newnode = new LinkNode(val);
while (curr->next) {
curr = curr->next;
}
curr->next = newnode;
newnode->next = NULL;
}
void LinkList::insertrange(int index, int val)
{
if (index < 0) {
cout << "数组下表不合法" << endl;
}
LinkNode* newnode = new LinkNode(val);
if (index == 0) {
newnode->next = head;
head = newnode;
}
if (index > 0) {
LinkNode* curr = head;
for (int i = 0; i < index ; i++) {
curr = curr->next;
}
newnode->next = curr->next;
curr->next = newnode;
if (curr == NULL) {
delete newnode;
}
}
}
void LinkList::updateElem(int index, int val)
{
if (index < 0) {
cout << "数组下表不合法" << endl;
}
int i = 0;
LinkNode* curr = head;
LinkNode* newnode = new LinkNode(val);
while (i < index) {
curr = curr->next;
i++;
}
curr->val = newnode->val;
}
void LinkList::deleteElem(int val)
{
while (head != nullptr && head->val == val) {
LinkNode* tmp =head;
head = head->next;
delete tmp;
}
LinkNode* curr = head;
LinkNode* pre = nullptr;
while (curr != nullptr) {
if (curr->val == val) {
pre->next = curr->next;
delete curr;
curr = pre->next;
}
else {
pre = curr;
curr = curr->next;
}
}
}
bool LinkList::findElem(int val)
{
LinkNode* curr = head;
while (curr != nullptr) {
if (curr->val == val) {
return true;
}
curr = curr->next;
}
return false;
}
int LinkList::GetElem(int index)
{
int i = 0;
LinkNode* curr = head;
while (i < index) {
curr = curr->next;
i++;
}
return curr->val;
}
LinkList::~LinkList()
{
while (head != NULL) {
LinkNode* tmp = head;
head = head->next;
delete tmp;
}
}
int main() {
LinkList* list = new LinkList();
list->insertathead(1);
list->insertathead(1);
list->insertathead(2);
list->insertattail(3);
list->insertattail(4);
list->insertattail(520);
list->insertattail(1314);
list->insertrange(5, 1125);
list->updateElem(5,7725);
if (list->findElem(1314)) {
cout << "查找成功" << endl;;
}
list->insertattail(2);
list->deleteElem(2);
list->deleteElem(520);
list->print();
cout << endl;
cout << list->GetElem(1);
}
基于C++实现的单链表
最新推荐文章于 2024-10-10 22:04:37 发布