//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
请按任意键继续. . .