#include<iostream>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
typedef int DATA;struct SNode //定义节点
{DATA data;SNode* pNext;
};
class CList //创建一个链表类
{SNode* m_hHead; //链表初始化char m_name[20];public:CList() //构造函数初始化链表{m_hHead = NULL;}void Setname(const char* p){strcpy(m_name, p);}void AddHead(DATA data) //头部插入{SNode* p = new SNode; //创建新的节点p->data = data; //数据域p->pNext = m_hHead; //指针域m_hHead = p; //链表初始头}void AddTail(DATA data) //尾插入{SNode* pNew = new SNode; //创建新的节点pNew->data = data; //数据域pNew->pNext = NULL; //指针域if (!m_hHead) //没有头节点情况下{m_hHead = pNew; //将新创建节点设置为头节点return;}SNode* p = m_hHead; //防止异常while (p->pNext != NULL) //遍历到最后一个节点p = p->pNext; p->pNext = pNew; }int Delete(DATA data) //删除节点{SNode* p = m_hHead, *p1 = NULL;//*p1用来记录前一个节点地址if (!p)return 0;if (p->data == data) //当要删除节点为头节点的情况{m_hHead = p->pNext;free(p);return 1;}while (p){if (p->data == data){p1->pNext = p->pNext;free(p);return 1;}p1 = p;p = p->pNext;}}void Print() //打印节点{cout << m_name << endl;SNode* p = m_hHead;while (p){cout << p->data << endl;p = p->pNext;}}void Modify(DATA data, DATA newData)//修改某处节点{SNode* p = m_hHead;while (p){if (p->data == data)p->data = newData;p = p->pNext;}}int Find(DATA data) //查找节点{SNode*p = m_hHead;int i = 0; //用于返回当前节点查找到的位置while (p){if (p->data == data)return i + 1;//代表成功,返回的位置p = p->pNext;++i;}return -1;//代表失败}int GETLIST() //返回节点总数量{SNode* p = m_hHead;int i = 0;while (p){i++;}return i;}
};int main()
{CList A,B;A.Setname("LIST1: ");A.AddHead(10);A.AddHead(9);A.AddHead(8);A.AddHead(7);A.AddHead(6);A.AddHead(5);B.Setname("LIST2: ");B.AddHead(4);B.AddHead(3);B.AddHead(2);B.AddHead(1);B.AddHead(0);A.Print();B.Print();system("pause");return 0;
}