#include "iostream"
using namespace std;
struct Node {
int Key;
Node *Next;
};
Node *newNode(int data);
void AddHead(Node *&pHead, int data);
void AddAfterX(Node *Head, int x);
void AddLast(Node *pHead, int data);
void GetList(Node *pHead);
bool FindX(Node *pHead, int x);
int main() {
Node *pHead;
AddHead(pHead,15);
AddHead(pHead,13);
AddHead(pHead,20);
AddHead(pHead,11);
GetList(pHead);
return 0;
}
Node *newNode(int data){
Node *p = new Node;
p ->Key = data;
p ->Next = NULL;
return p;
}
void GetList(Node *pHead){
cout<<"\n";
while(pHead != NULL){
cout<<" "<<pHead->Key;
pHead=pHead->Next;
}
}
void AddHead(Node* &pHead, int data){
Node *temp = newNode(data);
if(pHead == NULL)
pHead = temp;
else{
temp->Next = pHead;
pHead = temp;
}
}
void AddLast(Node *pHead, int data)
{
if(pHead==NULL)
AddHead(pHead, data);
else
{
Node *temp = newNode(data);
while(pHead->Next!=NULL);
pHead = pHead->Next;
pHead->Next = temp;
}
}
bool FindX(Node *pHead, int x)
{
while(pHead!=NULL)
if(pHead->Key==x)
break;
else
pHead =pHead->Next;
if(pHead==NULL)
return false;
else
return true;
}
void AddafterX(Node *pHead, int x)
{
if(FindX(pHead,x)==true)
{
while(pHead->Key != x)
pHead = pHead->Next;
int data;
cout<<"\nNhap gia tri can them = ";
cin>>data;
Node *temp = newNode(data);
temp->Next = pHead->Next;
pHead->Next = temp;
}
}
I2luY2x1ZGUgImlvc3RyZWFtIgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE5vZGUgewoJaW50IEtleTsKCU5vZGUgKk5leHQ7Cn07CgpOb2RlICpuZXdOb2RlKGludCBkYXRhKTsKdm9pZCBBZGRIZWFkKE5vZGUgKiZwSGVhZCwgaW50IGRhdGEpOwp2b2lkIEFkZEFmdGVyWChOb2RlICpIZWFkLCBpbnQgeCk7CnZvaWQgQWRkTGFzdChOb2RlICpwSGVhZCwgaW50IGRhdGEpOwp2b2lkIEdldExpc3QoTm9kZSAqcEhlYWQpOwpib29sIEZpbmRYKE5vZGUgKnBIZWFkLCBpbnQgeCk7CgppbnQgbWFpbigpIHsKCU5vZGUgKnBIZWFkOwoJQWRkSGVhZChwSGVhZCwxNSk7CglBZGRIZWFkKHBIZWFkLDEzKTsKCUFkZEhlYWQocEhlYWQsMjApOwoJQWRkSGVhZChwSGVhZCwxMSk7CglHZXRMaXN0KHBIZWFkKTsKCXJldHVybiAwOwp9CgpOb2RlICpuZXdOb2RlKGludCBkYXRhKXsKCU5vZGUgKnAgPSBuZXcgTm9kZTsKCXAgLT5LZXkgPSBkYXRhOwoJcCAtPk5leHQgPSBOVUxMOwoJcmV0dXJuIHA7Cn0KCiB2b2lkIEdldExpc3QoTm9kZSAqcEhlYWQpewogICAgIGNvdXQ8PCJcbiI7CiAgICAgd2hpbGUocEhlYWQgIT0gTlVMTCl7CgkJY291dDw8IiAiPDxwSGVhZC0+S2V5OwoJCXBIZWFkPXBIZWFkLT5OZXh0OwoJfQp9Cgp2b2lkIEFkZEhlYWQoTm9kZSogJnBIZWFkLCBpbnQgZGF0YSl7CglOb2RlICp0ZW1wID0gbmV3Tm9kZShkYXRhKTsKCWlmKHBIZWFkID09IE5VTEwpCgkgICAgcEhlYWQgPSB0ZW1wOwoJZWxzZXsKCQl0ZW1wLT5OZXh0ID0gcEhlYWQ7CgkJcEhlYWQgPSB0ZW1wOwoJfQp9Cgp2b2lkIEFkZExhc3QoTm9kZSAqcEhlYWQsIGludCBkYXRhKQp7CglpZihwSGVhZD09TlVMTCkKCSAgICBBZGRIZWFkKHBIZWFkLCBkYXRhKTsKCWVsc2UKCXsKCQlOb2RlICp0ZW1wID0gbmV3Tm9kZShkYXRhKTsKCQl3aGlsZShwSGVhZC0+TmV4dCE9TlVMTCk7CgkJICAgICBwSGVhZCA9IHBIZWFkLT5OZXh0OwoJCXBIZWFkLT5OZXh0ID0gdGVtcDsKCX0KfQoKYm9vbCBGaW5kWChOb2RlICpwSGVhZCwgaW50IHgpCnsKCXdoaWxlKHBIZWFkIT1OVUxMKQoJICAgIGlmKHBIZWFkLT5LZXk9PXgpCgkgICAgICAgIGJyZWFrOwoJICAgIGVsc2UKCSAgICAgICAgcEhlYWQgPXBIZWFkLT5OZXh0OwoJaWYocEhlYWQ9PU5VTEwpCgkgICAgcmV0dXJuIGZhbHNlOwoJZWxzZQoJICAgIHJldHVybiB0cnVlOwp9Cgp2b2lkIEFkZGFmdGVyWChOb2RlICpwSGVhZCwgaW50IHgpCnsKCWlmKEZpbmRYKHBIZWFkLHgpPT10cnVlKQoJewoJCXdoaWxlKHBIZWFkLT5LZXkgIT0geCkKCQkgICAgIHBIZWFkID0gcEhlYWQtPk5leHQ7CgkJICAgIAoJCWludCBkYXRhOwoJCWNvdXQ8PCJcbk5oYXAgZ2lhIHRyaSBjYW4gdGhlbSA9ICI7CgkJY2luPj5kYXRhOwoJCU5vZGUgKnRlbXAgPSBuZXdOb2RlKGRhdGEpOwoJCXRlbXAtPk5leHQgPSBwSGVhZC0+TmV4dDsKCQlwSGVhZC0+TmV4dCA9IHRlbXA7Cgl9Cn0=