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;
}
02-14 02:11