#include<iostream>
using namespace std;
struct node{
int data;
node* next;
};
// 合并排序链表 非递归算法
node*merr(node*phead1,node*phead2){
if(phead1 == nullptr &&phead2== nullptr)
return nullptr;
else if(phead1 == nullptr)
return phead2;
else if(phead2 == nullptr)
return phead1;
else{
node*head = nullptr;
node*p1 = nullptr;
while(phead1 != nullptr && phead2 != nullptr){
if(phead1->data < phead2->data){
if(head == nullptr)
head = p1 = phead1;
else{
p1->next = phead1;
p1 =p1->next;
}
phead1 = phead1->next;
}else{
if(head ==nullptr)
head = p1 = phead2;
else{
p1->next = phead2;
p1 = p1->next;
}
phead2 = phead2->next;
}
}
if(phead1 == nullptr)
p1->next = phead2;
else
p1->next = phead1;
return head;
}
}
//node* mer(node*phead,node*phead1){ //递归算法 合并两个链表
// if(phead ==nullptr && phead1 ==nullptr)
// return nullptr;
// else if(phead1==nullptr)
// return phead;
// else if(phead ==nullptr)
// return phead1;
// else{
// node* meer= nullptr;
// if(phead->data < phead1->data){
// meer= phead;
// meer->next = mer(phead->next,phead1);
// }else{
// meer = phead1;
// meer->next = mer(phead,phead1->next);
// }
// return meer;
// }
//}
void prin(node*phead){
node*p=phead;
while(p->next!=nullptr){
cout << p->data<<" ";
p=p->next;
}
cout << p->data<<endl;
}
//node* reve(node*phead){ //把链表反转 并输出反转之后头结点
// node* rev = nullptr;
// node*pre = nullptr;
// node*pnode= phead;
// while(pnode != nullptr){
// node* pnext = pnode->next;
// if(pnode->next == nullptr)
// rev = pnode;
// pnode->next = pre;
// pre = pnode;
// pnode = pnext;
// }
// return rev;
//}
//node* put(node*phead,unsigned k){ //输出第K个结点
// if(phead==nullptr || k==0)
// return nullptr;
// node*p1=phead;node*p2 =phead;
// for(unsigned i=0;i<k-1;++i){
// if(p2->next ==nullptr)
// return nullptr;
// else
// p2= p2->next;
// }
// while(p2->next !=nullptr){
// p1 = p1->next;
// p2 = p2->next;
// }
// return p1;
//}
int main(){
// 初始化链表
node* p1,*p2,*head =nullptr;
for(int i =1;i<8;i=i+2){
p1= new node;
p1->data = i;
if(head==nullptr){
head=p1;
p2= p1;
}else{
p2->next = p1;
p2 = p1;
}
p2->next= nullptr;
}
//初始化链表
// prin(head);
node* q1,*q2,*kead=nullptr;
for(int i=2;i<9;i=i+2){
q1=new node;
q1->data = i;
if(kead == nullptr){
kead=q1;
q2= q1;
}else{
q2->next= q1;
q2= q1;
}
q2->next =nullptr;
}
//prin(kead);
//输出链表
p1 = mer(kead,head);
prin(p1);
return 0;
}
//#include<iostream>
//#include<stack>
//using namespace std;
//struct node{
// int data ;
// node* next;
//};
void del(node** phead,node*tbd){ o(1)时间删除链表
if(!phead || !tbd)
return;
if(tbd->next != nullptr){
node *p = new node;
p = tbd->next;
tbd->data = p->data;
tbd->next = p->next;
delete p;
p=nullptr;
}else if(tbd == * phead){
delete *phead;
*phead = nullptr;
}else{
node*pnode = *phead;
while(pnode->next != tbd)
pnode = pnode->next;
pnode->next = nullptr;
delete tbd;
tbd =nullptr;
}
}
void prin(node*phead){ //打印反转链表
stack<node*> nodes;
node *pnode = phead;
while(pnode != nullptr)
{
nodes.push(pnode);
pnode = pnode-> next;
}
while(!nodes.empty()){
pnode = nodes.top();
cout << pnode->data<<endl;
nodes.pop();
}
}
//int main(){
// node*head=nullptr,*p1,*p2;
// for(int i = 0; i< 5;++i){
// p1 = new node;
// (*p1).data = i;
// if(head == nullptr){
// p2= p1;
// head= p1;
// }else{
// p2->next=p1;
// p2 = p1;
// }
// }
// p2->next = nullptr;
// node* pp =head->next->next->next->next;
// //prin(head);
// del(&head,pp);
//
// //输出链表
// p1 = head;
// while(p1->next!=nullptr){
// cout <<p1->data;
// p1= p1->next;
// }
// cout << p1->data;
// return 0;
//
//}