1、头文件
#pragma once
#ifndef LINKEDLIST_
#define LINKEDLIST_
#include <iostream>
class Node
{
public:
Node(int a=0, int b=0,Node*p=0) :value1(a), value2(b),next(p){}
int value1;
int value2;
Node *next;
private:
};
class LinkedList
{
public:
LinkedList():head(nullptr),tail(nullptr){}
~LinkedList();
//结尾插入数据
void insertTail(int, int);
//按照第一个值的大小顺序排序
void Listsort();
//按序号索引
Node* findIndex(int el);
//删除第info个节点
void deleteNode(int info);
//销毁链表
void ClearList(Node* ppHeadNode);
//返回链表长度
size_t ListLongth();
Node *head;
Node*tail;
private:
};
#endif
2、实现文件
#include "LinkedList.h"
LinkedList::~LinkedList()
{
;
}
void LinkedList::insertTail(int a, int b)
{
if (head == nullptr)
{
head = new Node(a, b);
}
else
{
Node*Temp=head;
while (Temp->next != nullptr)
{
Temp = Temp->next;
}
Temp->next = new Node(a, b);
tail = Temp->next;
}
}
void LinkedList::Listsort()
{
Node *p1 = head;
Node*p2;
for (p1; p1!= nullptr; p1 = p1->next)
{
for (p2 = p1->next; p2 != nullptr; p2 = p2->next)
{
if (p1->value1 > p2->value1)
{
int temp1=p1->value1;
int temp2 = p1->value2;
p1->value1 = p2->value1;
p1->value2 = p2->value2;
p2->value1 = temp1;
p2->value2 = temp2;
}
}
}
}
//索引一对儿值
Node* LinkedList::findIndex(int el)
{
Node*temp = head;
for (int i = 0; i < el; i++)
{
temp = temp->next;
}
Node*t=new Node(0);
t->value1 = temp->value1;
t->value2 = temp->value2;
return t;
}
void LinkedList::deleteNode(int el)
{
Node*pt = head;
Node*prev = head;
//删除头结点,切头结点不为空
if (el==1&&head->next!=nullptr)
{
head = head->next;
delete prev;
}
//头结点为空
else if (head->next == nullptr)
{
delete head;
}
//其他
else
{
for (int i=1;i<el;i++)
{
prev = pt;
pt = pt->next;
}
//如果删除的该节点为最后节点
if (pt->next == nullptr)
{
delete pt;
tail = prev;
}
//删除其他节点
else
{
prev->next = pt->next;
}
}
}
void LinkedList::ClearList(Node* Head)
{
Node* pListNodeTmp = nullptr;
if ((Head) == nullptr)
{
return;
}
// 循环释放链表中的结点所占内存,清空结束后
while ((Head)->next != nullptr)
{
pListNodeTmp = Head->next;
delete Head;
(Head) = pListNodeTmp;
}
// 清除最后一个结点
if (Head != nullptr)
{
delete Head;
Head = nullptr;
}
}
//返回链表的长度
size_t LinkedList::ListLongth()
{
int i = 1;
Node*pt=head;
while (pt->next!=nullptr)
{
pt = pt->next;
i++;
}
return i;
}