首页 > 其他 > 详细

链表的构造及功能实现

时间:2019-11-21 15:56:46      阅读:95      评论:0      收藏:0      [点我收藏+]
#include <iostream>
using namespace std;
class Node
{
public:
    int data;//节点数据
    Node *next;
    void printNode()
    {
        cout << data <<endl;
    }
};
class List
{
private:
    Node *m_pList;
    int m_iLength;//链表长度
public:
    List()//构造头节点
    {
        m_pList = new Node;
        m_pList->data = 0;
        m_pList->next = NULL;
        m_iLength = 0;
    }
    bool ListEmpty()//判断链表是否为空
    {
        if(m_iLength == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    int ListLength()//返回链表长度
    {
        return m_iLength;
    }
    void ClearList()//清空链表,但保留头节点
    {
        Node *currentNode = m_pList->next;
        while(currentNode != NULL)
        {
            Node *temp = currentNode->next;
            delete currentNode;
            currentNode = temp;
        }
        m_pList->next = NULL;
        m_iLength = 0;
    }
   ~List()//删除链表,删除头节点
   {
       ClearList();
       delete m_pList;
       m_pList = NULL;
   }
   bool ListInsertHead(Node *pNode)//在头节点之后插入新节点
   {
       Node *temp = m_pList->next;
       Node *newNode = new Node;
       if(newNode == NULL)
       {
           return false;
       }
       newNode->data = pNode->data;
       m_pList->next = newNode;
       newNode->next = temp;
       m_iLength++;
       return true;
   }
   bool ListInsertTail(Node *pNode)//在链表尾部插入节点
   {
       Node *currentNode = m_pList;
       while(currentNode->next != NULL)
       {
           currentNode = currentNode->next;
       }
       Node *newNode = new Node;
       if(newNode == NULL)
       {
           return false;
       }
       newNode->data = pNode->data;
       newNode->next = NULL;
       currentNode->next = newNode;
       m_iLength++;
       return true;
   }
   bool ListInsert(int i,Node *pNode)//在第i个位置插入节点
   {
       if(i<0||i>m_iLength)
       {
           return false;
       }
       Node *currentNode = m_pList;
       for(int k = 0;k < i;k++)
       {
           currentNode = currentNode->next;
       }
       Node *newNode = new Node;
       if(newNode == NULL)
       {
           return false;
       }
       newNode->data = pNode->data;
       newNode->next = currentNode->next;
       currentNode->next = newNode;
       return true;
   }
   bool ListDelete(int i,Node*pNode)//删除第i个节点
   {
       if(i<0 || i >= m_iLength)
       {
           return false;
       }
       Node *currentNode = m_pList;
       Node *currentNodeBefore =NULL;
       for(int k = 0;k <= i;k ++)
       {
           currentNodeBefore = currentNode;
           currentNode = currentNode->next;
       }
       currentNodeBefore->next =  currentNode->next;
       pNode->data = currentNode->data;
       delete currentNode;
       currentNode = NULL;
       m_iLength--;
       return true;
   }
};
int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

 

 

链表的构造及功能实现

原文:https://www.cnblogs.com/good-hair/p/11905822.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!