#include<iostream>
using namespace std;
template<class T>
class LinkNode{
public:
T data;
LinkNode<T> *pLast;
LinkNode<T> *pNext;
LinkNode(T data){
this->data = data;
}
};
template<class T>
class LinkList{
private:
LinkNode<T> *pHead;
LinkNode<T> *pTail;
public:
LinkList(){
this->pHead = NULL;
this->pTail = NULL;
}
void show();
void inserttail(T data);
void delete1(LinkNode<T> *p);
int deletex(T data);
};
template<class T>
void LinkList<T> :: show(){
LinkNode<T> *p;
if(this->pHead == NULL)
cout << "空" << endl;
else{
for(p = this->pHead;p!=pTail;p = p->pNext){
cout << p->data << " ";
}
cout << pTail->data << endl;
}
}
template<class T>
void LinkList<T> :: inserttail(T data){
LinkNode<T> *p = new LinkNode<T>(data);
if(pHead == NULL)
pHead = pTail = p;
else{
pHead->pLast = p;
p->pNext = pHead;
pTail->pNext = p;
p->pLast = pTail;
pTail = p;
}
}
template<class T>
void LinkList<T> :: delete1(LinkNode<T> *p){
if(p == pHead)
pHead = p->pNext;
if(p == pTail)
pTail = p->pLast;
p->pLast->pNext = p->pNext;
p->pNext->pLast = p->pLast;
delete p;
}
template<class T>
int LinkList<T> :: deletex(T data){
LinkNode<T> *temp;
if(pHead == NULL){
cout << "链表为空,无法删除!" << endl;
return 0;
}
else{
for(temp = pHead;temp != pTail;temp = temp->pNext){
if(temp->data == data){
delete1(temp);
cout << "删除成功!" << endl;
return 1;
}
}
if(pTail->data == data){
delete1(pTail);
return 1;
}
cout << "链表内不存在数据为" << data << "的结点!" << endl;
return 0;
}
}
int main(){
LinkNode<char> *x = new LinkNode<char>('p');
LinkList<char> *li = new LinkList<char>;
char c;
int res;
cout << "请输入数据(输入0结束):"<< endl;
cin >> c;
while(c != '0'){
li->inserttail(c);
cin >> c;
}
cout << "构建的链表为:" << endl;
li->show();
cout << "请输入要删除的结点的数据:" ;
cin >> c;
if(li->deletex(c)){
cout << "删除后的链表为:" << endl;
li->show();
}
return 0;
}