写算法将单链表L1分解为两个链表,其中以L1为头的链表保持原来向后的链接,另一个链表的头为L2,将其链接方向和L1的方向相反,其中L1包含原链表的奇数序号的结点,L2包含原链表中偶数序号的结点。
#include<iostream>
using namespace std;
struct node{
int data;
node* next;
};
node *build(node* p)
{
int n;
cin>>n;
p=(node*)malloc(sizeof(node));
node *r,*q;
r=p;
r->next=NULL;
while(n--)
{
q=(node*)malloc(sizeof(node));
cin>>q->data;
r->next=q;
r=q;
r->next=NULL;
}
p=p->next;
return p;
}
void print(node *B)
{
if(B==NULL)
cout<<"empty"<<endl;
else {
node *p;
p=B;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
}
void func(node* A,node* B)
{
int n=2;
B=NULL;
node *p,*pre;
p=A->next;
pre=A;
while(p)
{
if(n%2==1)
{
pre=p;
p=p->next;
}
else {
pre->next=p->next;
p->next=B;
B=p;
p=pre->next;
}
n=n+1;
}
print(A);
print(B);
}
int main()
{
while(1)
{
node *A=0,*B=0;
A=build(A);
func(A,B);
/*print(A);
print(B);*/
}
return 0;
}