#define LINKEDLIST_CLASS
#include
#include
using namespace std;
#ifndef NULL
const int NULL = 0;
#endif // NULL
template
class Node
{
private:
Nodenext; //指向后继节点的指针
public:
T data; //数据域
Node(const T& item, Node ptrnext = NULL);
void InsertAfter(Node *p);
Node *DeleteAfter(void);
Node *NextNode(void) const;
};
template
Node::Node(const T& item, Node* ptrnext) :data(item), next(ptrnext){
}
template
Node *Node::NextNode(void) const{
return next;
}
template
void Node::InsertAfter(Node *p){
p->next = next; //p节点指针域指向当前节点的后继节点
next = p; //当前节点的指针域指向p
}
template
Node *Node::DeleteAfter(void){
Node *tempPtr = next; //将欲删除的节点地址存储到tempPtr中
if (next == NULL) //如果当前节点没有后继节点,则返回NULL
return NULL;
next = tempPtr->next; //使当前节点的指针域指向tempPtr的后继节点
return tempPtr; //返回被删除的节点的地址
}
template
class LinkedList
{
private:
Node *front, *rear;
Node *prevPtr, *currPtr;
int size;
int position;
Node *GetNode(const T& item, Node *ptrNext = NULL);//f
public:
LinkedList(void);//f
LinkedList(const LinkedList& L); //拷贝构造函数f
void Reset(int pos = 0);
void Next(void); //使prevPtr和currPtr移动到下一个节点f
int EndOfList(void) const;//f
void InsertRear(const T& item); //在表尾添加f
T& Data(void);//f
};
template
LinkedList::LinkedList(void) : front(NULL), rear(NULL),prevPtr(NULL), currPtr(NULL), size(0), position(-1){
}
template
LinkedList::LinkedList(const LinkedList& L){
front = rear = NULL;
prevPtr = currPtr = NULL;
size = 0;
position = -1;
CopyList(L);
}
template
NodeLinkedList::GetNode(const T& item, Node ptrNext){
Node *p;
p = new Node(item, ptrNext);
if (p == NULL)
{
cout << "Memory allocation failure!\n";
exit(1);
}
return p;
}
//请在此处补充LinkedList类模板的部分实现代码
//____qcodep____
template
void LinkedList::InsertRear(const T& item){
Node *p = new Node(item, NULL);
if(front == NULL)
front = p;
else
rear->InsertAfter(p);
rear = p;
}
template
int LinkedList::EndOfList(void) const{
if(currPtr->NextNode() == NULL)
return 0;
else
return 1;
}
template
void LinkedList::Next(void){
position++;
prevPtr = currPtr;
if(currPtr != NULL)
currPtr = currPtr->NextNode();
}
template
T& LinkedList::Data(void){
currPtr = front;
return currPtr->data;
}
int main()
{
LinkedList A, B;
//初始化A.B二个链表1
//输入加入链表A的五个整数
int i, item;
for (i = 0; i
{
cin >> item;
A.InsertRear(item);
}
//输入加入链表B的五个整数:";
for (i = 0; i<5; i++)
{
cin >> item;
B.InsertRear(item);
}
while (!A.EndOfList())
{
cout << A.Data() << " ";
A.Next();
}
cout << endl;
}