#include <iostream>
using namespace std;
#include "stdlib.h"
struct strNode
{
char m_char;
strNode *next;
};
class strClassList
{
public:
strClassList()
{
m_isize=0;
phead=NULL;
}
~strClassList()
{
strNode *p= phead;
strNode *q=NULL;
while (p!=NULL)
{
q=p;
p=p->next;
delete q;
}
}
void initstrClassList(char str);
void addTail(char c);
void showList();
void sharedComTailNode(strClassList&b);/*strClassList& a,*/
strNode& operator[](int index);/*strClassList& A*/
int getSize(){return m_isize;}
private:
strNode * phead;
int m_isize;
};
//int(*parr[4]);
void strClassList ::initstrClassList(char str)
{
if (phead==NULL)
{
phead=new strNode;
phead->next=NULL;
phead->m_char=str;
m_isize=1;
}
}
void strClassList ::addTail(char str)
{
if (phead==NULL)
{
phead=new strNode;
phead->next=NULL;
phead->m_char=str;
}
else
{
strNode *pNew=new strNode;
pNew->m_char=str;
pNew->next=NULL;
strNode *p=phead;
while(p->next!=NULL)p=p->next;
p->next=pNew;
}
m_isize++;
}
void strClassList ::showList()
{
strNode *p=phead;
while(p!=NULL)
{
cout<<p <<" :"<<p->m_char<<endl;
p=p->next;
}
cout<<endl;
}
strNode& strClassList ::operator[](int index)/*strClassList& A*/
{
if (index<0 || index>m_isize)
{
cout<<"param err"<<endl;
//return NULL;
}
strNode *p =phead;
int ListCount=0;
while(p!=NULL)
{
if (ListCount==index)
return *p;
else
p=p->next;
ListCount++;
}
if (p==NULL)
{
//return NULL;
}
}
void strClassList ::sharedComTailNode(strClassList& B)/*strClassList& A,*/
{
strNode* pA=NULL;
strNode* pB=NULL;
pA=phead;
pB=B.phead;
int iASize=getSize();
int iBSize=B.getSize();
int minSize=getSize()<B.getSize()?getSize():B.getSize();
int index;
//从后到前寻找相同的后缀 找到之后
for ( index=1;index<minSize;index++)
{
if ((*this)[iASize-index].m_char==B[iBSize-index].m_char)
continue;
else
break;
}
strNode temp;
strNode* ptemp,*qtemp;
temp=(*this)[iASize-index];
ptemp=temp.next;
//删除后续节点
while(ptemp!=NULL)
{
qtemp=ptemp;
ptemp=ptemp->next;
delete qtemp;
}
//指向新的节点
(*this)[iASize-index].next= B[iBSize-index].next;
}
void main()
{
strClassList str1,str2;
str1.addTail('L');
str1.addTail('o');
str1.addTail('a');
str1.addTail('d');
str1.addTail('0');
str1.addTail('n');
str1.addTail('g');
str1.showList();
str2.addTail('B');
str2.addTail('e');
//str2.addTail('e');
//str2.addTail('e');
//str2.addTail('e');
//str2.addTail('e');
//str2.addTail('i');
str2.addTail('i');
str2.addTail('n');
str2.addTail('g');
str2.showList();
str2.sharedComTailNode(str1);
//cout<<str2[3].m_char;
cout<<"*****1****"<<endl;
str1.showList();
cout<<"*****2****"<<endl;
str2.showList();
// 这里退出会有问题,大家想一想 为什么^-^
system("pause");
}