List.h文件
#pragma once
#include<iostream>
using namespace std;
struct Node {
int val;
Node *pNext;
Node(int val) {
this->val = val;
pNext = NULL;
}
};
class List {
Node *pHead;
public:
List();
void buildList(int arr[], int n);//创建链表
void checkANode(int val);//检查一个元素上是否在链表中
void changeList(int val, int des);//改变链表中的某一个元素
void addANode(int val, int des);//在链表某一个元素之前添加一个元素
void deleteANode(int val);//删除链表中的一个元素
void deleList();//删除整个链表
void print();//打印链表
};
List.cpp文件
#include"List.h"
#include<iostream>
using namespace std;
List::List() {
pHead = NULL;
}
//创建链表--把数组的第一个元素定为头节点,因为头结点的是稳定的,不能每次移动头节点,所以令p等于头节点,然后一次让上一个元素的pNext指向下一个元素
void List::buildList(int arr[], int n) {
pHead = new Node(arr[0]);
Node* p = pHead;
for (int i = 1; i < n; i++) {
p->pNext = new Node(arr[i]);
p = p->pNext;
}
}
//查
void List::checkANode(int val) {
Node* p = pHead;
while (p != NULL)
{
if (p->val == val) {
cout <<val << "在链表中存在!";
return;
}
p = p->pNext;
}
cout << val << "在链表中不不不存在!";
return;
}
//改
void List::changeList(int val, int des) {
Node* p = pHead;
while (p != NULL)
{
if (p->val == val) {
p->val = des;
cout << val << "已成功变成" << des;
return;
}
p = p->pNext;
}
cout << val << "在链表中不存在,你改啥!";
return;
}
//增--要注意增加的位置是不是头节点,pre记录的是当前节点的上一个节点
void List::addANode(int val, int des) {
Node* p = pHead;
Node* pre = NULL;
Node* newNode = new Node(des);
while (p != NULL)
{
if (p->val == val) {
if (p == pHead) {
newNode->pNext = pHead;
pHead = newNode;
return;
}
newNode->pNext = p;
pre->pNext = newNode;
return;
}
pre = p;
p = p->pNext;
}
}
//删
void List::deleteANode(int val) {
Node* p = pHead;
Node* pre = NULL;
while (p != NULL)
{
if (p->val == val) {
if (p == pHead) {
pHead = pHead->pNext;
return;
}
pre->pNext = p->pNext;
return;
}
pre = p;
p = p->pNext;
}
}
//删除整个链表
void List::deleList() {
while (pHead != NULL) {
pHead = pHead->pNext;
}
}
void List::print() {
Node* p = pHead;
while (p!=NULL)
{
cout << p->val << " ";
p = p->pNext;
}
}
源文件
#include<iostream>
#include"List.h"
using namespace std;
int main() {
List list;
int a[] = { 2,4,6,3,5 };
list.buildList(a, 5);
list.print();
cout << endl;
list.checkANode(1);
cout << endl;
list.changeList(10, 2);
cout << endl;
list.print();
cout << endl;
list.addANode(4,10);
list.print();
cout << endl;
list.deleteANode(2);
list.print();
cout << endl;
list.deleList();
list.print();
cout << endl;
return 0;
}