#include <iostream>
using namespace std;
struct Data{
int n;
};
struct Node{
Data data;
Node* pnext;
};
struct List{
Node* pHead;
Node* pTail;
};
Node* CreateNode(Data data);
Node* CreateNode(int n);
void InitList(List &lst);
bool IsEmpty(const List &lst);
void AddHead(List &lst, Node* pnode);
void AddHead(List &lst, int n);
void AddTail(List &lst,Node* pnode);
void AddTail(List &lst,int n);
int Size(const List &lst);
void PrintList(const List &lst,string);
void Insert(List &lst,Node* pnode,int index);
//void Insert(List &lst,int n,int index);
int main(){
List lst;
InitList(lst);
Node* node1=CreateNode(5);
AddHead(lst,5);
PrintList(lst,"Add head 1");
AddHead(lst,5);
PrintList(lst,"Add head 2");
AddHead(lst,5);
PrintList(lst,"Add head 3");
AddHead(lst,5);
PrintList(lst,"Add head 4");
AddHead(lst,5);
PrintList(lst,"Add head 5");
// Insert(lst,node1,0);
// PrintList(lst,"Add index 1");
// Insert(lst,node1,1);
// cout<<"Insert k loi\n";
//
// Insert(lst,node1,0);
// PrintList(lst,"Add index 1");
// Insert(lst,node1,0);
// PrintList(lst,"Add index 1");
}
Node* CreateNode(Data _data){
Node* ptemp;
ptemp=new Node;
ptemp->data=_data;
ptemp->pnext=nullptr;
return ptemp;
}
Node* CreateNode(int _n){
Data _data;
_data.n=_n;
return CreateNode(_data);
}
bool IsEmpty(const List &lst){
if(lst.pHead && lst.pTail){
return false;
}
else
return true;
}
void InitList(List &lst){
lst.pHead=nullptr;
lst.pTail=nullptr;
}
void AddHead(List &lst,Node* pnode){
if(IsEmpty(lst)){
lst.pHead=lst.pTail=pnode;
}
else{
pnode->pnext=lst.pHead;
lst.pHead=pnode;
}
}
void AddHead(List &lst,int n){
Node* pnode=CreateNode(n);
if(IsEmpty(lst)){
lst.pHead=lst.pTail=pnode;
}
else{
pnode->pnext=lst.pHead;
lst.pHead=pnode;
}
}
void AddTail(List &lst,Node* pnode){
if(IsEmpty(lst)){
lst.pHead=lst.pTail=pnode;
}
else{
lst.pTail->pnext=pnode;
lst.pTail=pnode;
}
}
void AddTail(List &lst, int n){
Node* pnode=CreateNode(n);
if(IsEmpty(lst)){
lst.pHead=lst.pTail=pnode;
}
else{
lst.pTail->pnext=pnode;
lst.pTail=pnode;
}
}
int Size(const List &lst){
int count=0;
Node* pnode=lst.pHead;
while(pnode){
count++;
pnode=pnode->pnext;
}
return count;
}
void PrintList(const List &lst,string mess){
cout<<mess<<endl;
if(IsEmpty(lst)){
cout<<"\nList is Empty!!";
}
else{
Node* pnode=lst.pHead;
while(pnode){
cout<<pnode->data.n<<"\t";
pnode=pnode->pnext;
}
}
cout<<endl;
}
void Insert(List &lst,Node* pnode,int index){
int size_list=Size(lst);
if(index>size_list || index<0){
cout<<"\nIndex is invalid(bigger than size list or be negative number)!!";
return;
}
if(index==size_list){
AddTail(lst,pnode);
}
else if(index==0){
AddHead(lst,pnode);
}
else{
Node* ptemp=lst.pHead;
for(int i=1;i<=index;i++){
if(i==index){
pnode->pnext=ptemp->pnext;
ptemp->pnext=pnode;
}
ptemp=ptemp->pnext;
}
}
}
//void Inset(List &lst,int n,int index){
// int size_list=Size(lst);
// if(index<0 || index>size_list){
// cout<<"\nInvalid index(is bigger than size list or negative number!!)";
// return;
// }
//
// if(index==0){
// AddHead(lst,n);
// }
// else if(index==size_list){
// AddTail(lst,n);
// }
// else{
// Node* pnode=CreateNode(n);
// Node* ptemp=lst.pHead;
// for(int i=1;i<=index;i++){
// if(i==index){
// pnode->pnext=ptemp->pnext;
// ptemp->pnext=pnode;
// }
// ptemp=ptemp->pnext;
// }
// }
//}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBEYXRhewoJaW50IG47Cn07CnN0cnVjdCBOb2RlewoJRGF0YSBkYXRhOwoJTm9kZSogcG5leHQ7Cn07CnN0cnVjdCBMaXN0ewoJTm9kZSogcEhlYWQ7CglOb2RlKiBwVGFpbDsKfTsKCk5vZGUqIENyZWF0ZU5vZGUoRGF0YSBkYXRhKTsKTm9kZSogQ3JlYXRlTm9kZShpbnQgbik7CnZvaWQgSW5pdExpc3QoTGlzdCAmbHN0KTsKYm9vbCBJc0VtcHR5KGNvbnN0IExpc3QgJmxzdCk7CnZvaWQgQWRkSGVhZChMaXN0ICZsc3QsIE5vZGUqIHBub2RlKTsKdm9pZCBBZGRIZWFkKExpc3QgJmxzdCwgaW50IG4pOwp2b2lkIEFkZFRhaWwoTGlzdCAmbHN0LE5vZGUqIHBub2RlKTsKdm9pZCBBZGRUYWlsKExpc3QgJmxzdCxpbnQgbik7CmludCBTaXplKGNvbnN0IExpc3QgJmxzdCk7CnZvaWQgUHJpbnRMaXN0KGNvbnN0IExpc3QgJmxzdCxzdHJpbmcpOwp2b2lkIEluc2VydChMaXN0ICZsc3QsTm9kZSogcG5vZGUsaW50IGluZGV4KTsKLy92b2lkIEluc2VydChMaXN0ICZsc3QsaW50IG4saW50IGluZGV4KTsKCgppbnQgbWFpbigpewoJTGlzdCBsc3Q7CglJbml0TGlzdChsc3QpOwoKCQoJTm9kZSogbm9kZTE9Q3JlYXRlTm9kZSg1KTsKCQoJQWRkSGVhZChsc3QsNSk7CglQcmludExpc3QobHN0LCJBZGQgaGVhZCAxIik7CgkKCUFkZEhlYWQobHN0LDUpOwoJUHJpbnRMaXN0KGxzdCwiQWRkIGhlYWQgMiIpOwoJCglBZGRIZWFkKGxzdCw1KTsKCVByaW50TGlzdChsc3QsIkFkZCBoZWFkIDMiKTsKCQoJQWRkSGVhZChsc3QsNSk7CglQcmludExpc3QobHN0LCJBZGQgaGVhZCA0Iik7CgkKCUFkZEhlYWQobHN0LDUpOwoJUHJpbnRMaXN0KGxzdCwiQWRkIGhlYWQgNSIpOwoJCi8vCUluc2VydChsc3Qsbm9kZTEsMCk7Ci8vCVByaW50TGlzdChsc3QsIkFkZCBpbmRleCAxIik7Ci8vCUluc2VydChsc3Qsbm9kZTEsMSk7Ci8vCWNvdXQ8PCJJbnNlcnQgayBsb2lcbiI7Ci8vCQovLwlJbnNlcnQobHN0LG5vZGUxLDApOwovLwlQcmludExpc3QobHN0LCJBZGQgaW5kZXggMSIpOwovLwlJbnNlcnQobHN0LG5vZGUxLDApOwovLwlQcmludExpc3QobHN0LCJBZGQgaW5kZXggMSIpOwp9CgpOb2RlKiBDcmVhdGVOb2RlKERhdGEgX2RhdGEpewoJTm9kZSogcHRlbXA7CglwdGVtcD1uZXcgTm9kZTsKCXB0ZW1wLT5kYXRhPV9kYXRhOwoJcHRlbXAtPnBuZXh0PW51bGxwdHI7CglyZXR1cm4gcHRlbXA7Cn0KCk5vZGUqIENyZWF0ZU5vZGUoaW50IF9uKXsKCURhdGEgX2RhdGE7CglfZGF0YS5uPV9uOwoJcmV0dXJuIENyZWF0ZU5vZGUoX2RhdGEpOwoJCn0KCmJvb2wgSXNFbXB0eShjb25zdCBMaXN0ICZsc3QpewoJaWYobHN0LnBIZWFkICYmIGxzdC5wVGFpbCl7CgkJcmV0dXJuIGZhbHNlOwoJfQoJZWxzZSAKCQlyZXR1cm4gdHJ1ZTsKfQoKdm9pZCBJbml0TGlzdChMaXN0ICZsc3QpewoJbHN0LnBIZWFkPW51bGxwdHI7Cglsc3QucFRhaWw9bnVsbHB0cjsKfQoKdm9pZCBBZGRIZWFkKExpc3QgJmxzdCxOb2RlKiBwbm9kZSl7CglpZihJc0VtcHR5KGxzdCkpewoJCWxzdC5wSGVhZD1sc3QucFRhaWw9cG5vZGU7Cgl9CgllbHNlewoJCXBub2RlLT5wbmV4dD1sc3QucEhlYWQ7CgkJbHN0LnBIZWFkPXBub2RlOwoJfQp9Cgp2b2lkIEFkZEhlYWQoTGlzdCAmbHN0LGludCBuKXsKCU5vZGUqIHBub2RlPUNyZWF0ZU5vZGUobik7CglpZihJc0VtcHR5KGxzdCkpewoJCWxzdC5wSGVhZD1sc3QucFRhaWw9cG5vZGU7Cgl9CgllbHNlewoJCXBub2RlLT5wbmV4dD1sc3QucEhlYWQ7CgkJbHN0LnBIZWFkPXBub2RlOwoJfQp9Cgp2b2lkIEFkZFRhaWwoTGlzdCAmbHN0LE5vZGUqIHBub2RlKXsKCWlmKElzRW1wdHkobHN0KSl7CgkJbHN0LnBIZWFkPWxzdC5wVGFpbD1wbm9kZTsKCX0KCWVsc2V7CgkJbHN0LnBUYWlsLT5wbmV4dD1wbm9kZTsKCQlsc3QucFRhaWw9cG5vZGU7Cgl9Cn0KCnZvaWQgQWRkVGFpbChMaXN0ICZsc3QsIGludCBuKXsKCU5vZGUqIHBub2RlPUNyZWF0ZU5vZGUobik7CglpZihJc0VtcHR5KGxzdCkpewoJCWxzdC5wSGVhZD1sc3QucFRhaWw9cG5vZGU7Cgl9CgllbHNlewoJCWxzdC5wVGFpbC0+cG5leHQ9cG5vZGU7CgkJbHN0LnBUYWlsPXBub2RlOwoJfQp9CgppbnQgU2l6ZShjb25zdCBMaXN0ICZsc3QpewoJaW50IGNvdW50PTA7CglOb2RlKiBwbm9kZT1sc3QucEhlYWQ7Cgl3aGlsZShwbm9kZSl7CgkJY291bnQrKzsKCQlwbm9kZT1wbm9kZS0+cG5leHQ7Cgl9CglyZXR1cm4gY291bnQ7Cn0KCnZvaWQgUHJpbnRMaXN0KGNvbnN0IExpc3QgJmxzdCxzdHJpbmcgbWVzcyl7Cgljb3V0PDxtZXNzPDxlbmRsOwoJaWYoSXNFbXB0eShsc3QpKXsKCQljb3V0PDwiXG5MaXN0IGlzIEVtcHR5ISEiOwoJfQoJZWxzZXsKCQlOb2RlKiBwbm9kZT1sc3QucEhlYWQ7CgkJd2hpbGUocG5vZGUpewoJCQljb3V0PDxwbm9kZS0+ZGF0YS5uPDwiXHQiOwoJCQlwbm9kZT1wbm9kZS0+cG5leHQ7CgkJfQoJfQoJY291dDw8ZW5kbDsKfQoKdm9pZCBJbnNlcnQoTGlzdCAmbHN0LE5vZGUqIHBub2RlLGludCBpbmRleCl7CglpbnQgc2l6ZV9saXN0PVNpemUobHN0KTsKCWlmKGluZGV4PnNpemVfbGlzdCB8fCBpbmRleDwwKXsKCQljb3V0PDwiXG5JbmRleCBpcyBpbnZhbGlkKGJpZ2dlciB0aGFuIHNpemUgbGlzdCBvciBiZSBuZWdhdGl2ZSBudW1iZXIpISEiOwoJCXJldHVybjsKCX0KCQoJaWYoaW5kZXg9PXNpemVfbGlzdCl7CgkJQWRkVGFpbChsc3QscG5vZGUpOwoJfQoJZWxzZSBpZihpbmRleD09MCl7CgkJQWRkSGVhZChsc3QscG5vZGUpOwoJfQoJZWxzZXsKCQlOb2RlKiBwdGVtcD1sc3QucEhlYWQ7CgkJZm9yKGludCBpPTE7aTw9aW5kZXg7aSsrKXsKCQkJaWYoaT09aW5kZXgpewoJCQkJcG5vZGUtPnBuZXh0PXB0ZW1wLT5wbmV4dDsKCQkJCXB0ZW1wLT5wbmV4dD1wbm9kZTsKCQkJfQoJCQlwdGVtcD1wdGVtcC0+cG5leHQ7CgkJfQoJfQp9CgovL3ZvaWQgSW5zZXQoTGlzdCAmbHN0LGludCBuLGludCBpbmRleCl7Ci8vCWludCBzaXplX2xpc3Q9U2l6ZShsc3QpOwovLwlpZihpbmRleDwwIHx8IGluZGV4PnNpemVfbGlzdCl7Ci8vCQljb3V0PDwiXG5JbnZhbGlkIGluZGV4KGlzIGJpZ2dlciB0aGFuIHNpemUgbGlzdCBvciBuZWdhdGl2ZSBudW1iZXIhISkiOwovLwkJcmV0dXJuOwovLwl9Ci8vCQovLwlpZihpbmRleD09MCl7Ci8vCQlBZGRIZWFkKGxzdCxuKTsKLy8JfQovLwllbHNlIGlmKGluZGV4PT1zaXplX2xpc3QpewovLwkJQWRkVGFpbChsc3Qsbik7Ci8vCX0KLy8JZWxzZXsKLy8JCU5vZGUqIHBub2RlPUNyZWF0ZU5vZGUobik7Ci8vCQlOb2RlKiBwdGVtcD1sc3QucEhlYWQ7Ci8vCQlmb3IoaW50IGk9MTtpPD1pbmRleDtpKyspewovLwkJCWlmKGk9PWluZGV4KXsKLy8JCQkJcG5vZGUtPnBuZXh0PXB0ZW1wLT5wbmV4dDsKLy8JCQkJcHRlbXAtPnBuZXh0PXBub2RlOwovLwkJCX0KLy8JCQlwdGVtcD1wdGVtcC0+cG5leHQ7Ci8vCQl9Ci8vCX0KLy99CgoKCgoK