C++链表(删除,插入,销毁,返回长度)

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;
}

 

转载于:https://www.cnblogs.com/hsy1941/p/11599249.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值