利用类对象为节点创建简单单向链表

//Node.h
#include <iostream>
using namespace std;
class Node
{
public:

    Node(int data)
    {
        this->data = data;
        this->next = NULL;
    }
    ~Node() {}
    static Node * pHead;//因为头尾指针不属于某一个对象,而是整个类,
    static Node * pTail;//所以要用静态类型。又因为静态变量,只能被静态函数调用,所以对链表的操作方法都是静态方法
    static void AddNode(int data)//添加节点
    {
        if(pHead == NULL)
        {
            pHead = new Node(data);
            pTail = pHead;
            return;
        }

        pTail->next = new Node(data);
        pTail = pTail->next;
    }
    static void AddNode(Node *node)
    {
        if(pHead == NULL)
        {
            pHead = node;
            pTail = pHead;
            return;
        }

        pTail->next = node;
        pTail = pTail->next;
    }
    static bool DeleteNodes(int data)
    {
        if(pHead == NULL)
            return false;

        Node *pTemp = pHead;

        while(pHead->data == data)//从头节点开始,要连续要被删除的节点
        {                          // 如:4 4 4 4 5 6 ,删除含有4的节点
            pHead = pHead->next;  // 则该循环连续删除前面的4个4
            delete pTemp;
            pTemp = pHead;

            if(pHead == NULL)
                return true;
        }

        Node *pMove = pTemp->next;//再定义一个节点指针,用于移动删除节点

        while(pMove != NULL)//头节点不含有要被删除的值,即头节点不删除
        {
            if(pMove->data == data)
            {
                pTemp->next = pMove->next;
                delete pMove;
                pMove = pTemp->next;
            }
            else
            {
                pTemp = pTemp->next;
                pMove = pMove->next;
            }
        }
		return true;
    }
    static void GetNodesMessage()
    {
        if(pHead == NULL)
        {
            cout << "当前链表为空!" << endl;
            return;
        }

        Node *pTemp = pHead;

        while(pTemp != NULL)
        {
            cout << pTemp->data << "->";
            pTemp = pTemp->next;
        }

        cout << "NULL" << endl;
    }
private:
    int data;
    Node *next;
};
Node* Node::pHead = NULL;
Node *Node::pTail = NULL;//初始化



//源.cpp
#include "Node.h"
using namespace std;
int main()
{
    Node::GetNodesMessage();
    cout << "添加节点" << endl;
    Node *n1;
    n1 = new Node(9);
    Node::AddNode(4);
    Node::AddNode(4);
    Node::AddNode(4);
    Node::AddNode(5);
    Node::AddNode(6);
    Node::AddNode(7);
    Node::AddNode(8);
    Node::AddNode(4);
    Node::AddNode(n1);
    Node::GetNodesMessage();
    Node::DeleteNodes(4);
    Node::GetNodesMessage();
    system("pause");
    return 0;
}

运行结果:


当前链表为空!
添加节点
4->4->4->5->6->7->8->4->9->NULL
5->6->7->8->9->NULL
请按任意键继续. . .


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值