#include <iostream>
using namespace std;
#define ElemType int
#define maxSize 100
typedef struct lNode {
ElemType data;
struct lNode *next;
}lNode, *linkList;
bool InitLinkList(linkList &L) {
L = new lNode;
L->next = NULL;
return true;
}
bool inputLinkListHead(linkList &L) {
lNode *p;
ElemType data;
cin >> data;
while(data != -1) {
p = new lNode;
p->data = data;
p->next = L->next;
L->next = p;
cin >> data;
}
return true;
}
bool inputLinkListTail(linkList &L) {
lNode *p;
lNode *tail;
tail = L;
ElemType data;
cin >> data;
while(data != -1) {
p = new lNode;
p->data = data;
tail->next = p;
tail = tail->next;
cin >> data;
}
tail->next = NULL;
return true;
}
int outputLengthLinkList(linkList L) {
int res = 0;
lNode *p;
p = L->next;
while(p != NULL) {
res ++;
p = p->next;
}
return res;
}
bool outputLinkList(linkList L) {
lNode *p;
p = L->next;
while(p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
return true;
}
bool insertLinkList(linkList &L, int i, ElemType e) {
lNode *p;
p = L;
for(int j = 0; j < i-1; j ++) {
p = p->next;
if(p == NULL) {
break;
}
}
if(p == NULL) return false;
lNode *newP;
newP = new lNode;
newP->data = e;
newP->next = p->next;
p->next = newP;
return true;
}
int searchLinkList(linkList &L, ElemType e) {
int res = 0;
lNode *p;
p = L;
int flag = 0;
while(p != NULL) {
p = p->next;
res ++;
if(p->data == e) {
flag = 1;
break;
}
}
if(flag == 0) return -1;
else return res;
}
bool insertLinkList_eAfterE(linkList &L, ElemType E, ElemType e) {
int res = searchLinkList(L, E);
if(res == -1) return false;
else {
bool flag = insertLinkList(L, res, e);
return flag;
}
}
bool insertLinkList_eBeforeE(linkList &L, ElemType E, ElemType e) {
int res = searchLinkList(L, E);
if(res == -1) return false;
else {
bool flag = insertLinkList(L, res + 1, e);
return flag;
}
}
bool deleteLinkListI(linkList &L, int i) {
int res = outputLengthLinkList(L);
if(res < i) return false;
lNode *p;
p = L;
for(int j = 0; j < i-1; j ++) {
p = p->next;
}
lNode *q;
q = p->next;
p->next = q->next;
delete q;
return true;
}
bool deleteLinkListE(linkList &L, ElemType e) {
lNode *p;
p = L;
while(p != NULL) {
p = p->next;
if(p->next->data == e) break;
}
if(p->next == NULL) return false;
else {
lNode *q;
q = p->next;
p->next = q->next;
delete q;
return true;
}
}
int main() {
linkList L2;
InitLinkList(L2);
inputLinkListTail(L2);
deleteLinkListE(L2, 4);
outputLinkList(L2);
return 0;
}