链表定义(c++)
#include
#include
using namespace std;
template
class Node {
public:
Node
T data; //数据域
Node (const T &data, Node
void insertAfter(Node
Node
Node
};
//类的实现部分
//构造函数,初始化数据和指针成员
template
Node
//返回后继结点的指针
template
Node
return next;
}
//在当前结点之后插入一个结点p
template
void Node
p->next = next; //p结点指针域指向当前结点的后继结点
next = p; //当前结点的指针域指向p
}
//删除当前结点的后继结点,并返回其地址
template
Node
if (next == 0) //如果当前结点没有后继结点,则返回空指针
return 0;
next = tempPtr->next; //使当前结点的指针域指向tempPtr的后继结点
return tempPtr; //返回被删除的结点的地址
}
template
class LinkedList {
private:
//数据成员:
Node
Node
int size;
int position;
Node
void freeNode(Node
void copy(const LinkedList
public:
LinkedList();
LinkedList(const LinkedList
~LinkedList();
LinkedList
int getSize() const;
bool isEmpty() const;
void reset();
void next();
bool endOfList() const;
int currentPosition() const;
void insertFront(const T &item);
void insertRear(const T &item);
void insertAt(const T &item);
void insertAfter(const T &item);
T deleteFront();
void deleteCurrent();
T& data();
// const T& data() const
void clear();
};
template
void LinkedList
delete p;
}
template
Node
Node
return pt;
}
template
LinkedList
front=currPtr=rear=0;
size=position=0;
}
template
int LinkedList
return size;
}
template
bool LinkedList
if(size==0)
return true;
else
return false;
}
template
void LinkedList
Node
if(size==0){
front=currPtr=rear=p;
// position=1;
// front->next=0;
}
else
{
p->next=front;
front=p;
}
size++;
position+=1;
}
template
int LinkedList
currentPosition() const{
return position;
}
template
void LinkedList
if(size==0)
insertFront(item);
else{
Node
rear->next=p;
rear=p;
size++;
}
}
template
void LinkedList
if(front==currPtr)
insertFront(item);
Node
Node
while(pa->next!=currPtr){
pa=pa->next;
}
pa->next=p;
p->next=currPtr;
currPtr=p;
size++;
}
template
void LinkedList
if(currPtr==rear){
insertRear(item);
currPtr=rear;
}
else{
Node
p->next=currPtr->next;
currPtr->next=p;
currPtr=p;
size++;
position++;
}
}
template
bool LinkedList
if(isEmpty())
exit(1); //assert(size!=0);
else if(currPtr->next==NULL)// currPtr==rear
return true;
else
return false;
}
template
T LinkedList
if(size==0)
exit(1);
else if(size==1){
Node
front=rear=currPtr=0;
size=position=0;
return pa->data;
}
else
{
Node
front=front->next;
size--;
position-=1;
return pb->data;
}
}
template
void LinkedList
if(front==currPtr) {
deleteFront();
}
else if(currPtr==rear){
Node
while(pa->next!=currPtr){
pa=pa->next;
}
pa->next=0;
rear=currPtr=pa;
size--;
position--;
}
else {
Node
while(pb->next!=currPtr){
pb=pb->next;
}
pb->next=currPtr->next;
currPtr=currPtr->next;
size--;
}
}
template
void LinkedList
if(currPtr==rear){
if(currPtr==NULL)
cout<<"This is an empty linkedlist"<
cout<<"Here is end of linkedlist."<
else
{
currPtr=currPtr->next;
position++;
}
}
template
void LinkedList
if(size==0)
cout<<"This is an empty linkedlist"<
position=1;
currPtr=front;
}
}
template
T& LinkedList
if(currPtr==NULL)
exit(1);
return currPtr->data;
}
template
void LinkedList
Node
while(pb!=0){
Node
pb=pc->next;
freeNode(pc);
}
front=rear=currPtr=0;
size=position=0;
}
template
LinkedList
clear();
}
template
void LinkedList
{
Node
size=0;
for(int i=0;i
if(i==L.position-1)
currPtr=rear;
pb=pb->next;
}
position=L.position;
}
template
LinkedList
copy(L);
}
template
LinkedList
clear();
copy(L);
return *this;
}
int main(){
LinkedList
/
* A.insertAt(4);
cout<
if(A.endOfList())
cout<<"Yes"<
cout<<"No"<
cout<
/*{A.insertAfter(8);
cout<
/*{A.insertRear(10);
cout<
/* {A.next();
cout<
/*{A.reset();
cout<
cout<
/*{cout<
cout<
A.insertFront(7);
cout<
if(A.endOfList())
cout<<"Yes"<
cout<<"No"<
/* {A.deleteCurrent();
cout<
{A.next();
cout<
A.insertAt(4);
LinkedList
{B=A;
cout<
cout<
cout<
if(A.endOfList())
cout<<"Yes"<
cout<<"No"<
cout<
{A.insertAfter(8);
cout<
dl;
}
{A.insertRear(10);
cout<
{A.deleteFront();
cout<
{LinkedList
cout<
cout<
{A.deleteCurrent();
cout<
{A.next();
cout<
{A.reset();
cout<
{A.clear();
cout<
return 0;
}