截断一个单链表
原始单链表L={a1,b2,a2,b2,......an,bn},截成两个分别为L1={a1,a2,a3....an},L2={bn,bn-1,...b1},且L1用L的头结点
实现代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNode{
int data;
struct LinkNode *next;
} LinkNode;
void CreateLinkNode(LinkNode *&L,int a[],int n){
LinkNode *p,*L1;
int i;
L=(LinkNode*)malloc(sizeof(LinkNode));
L->next=NULL;
L1=L;
for(i=0;i<n;++i){
p=(LinkNode*)malloc(sizeof(LinkNode));
p->data=a[i];
L1->next=p;
L1=p;
}
L1->next=NULL;
}
void Split(LinkNode *&L,LinkNode *&L1,LinkNode *&L2){
LinkNode *p=L->next,*q,*r1;
L1=L;
r1=L1;
L2=(LinkNode*)malloc(sizeof(LinkNode));
L2->next=NULL;
while(p!=NULL){
r1->next=p;
r1=p;
p=p->next;
q=p->next;
p->next=L2->next;
L2->next=p;
p=q;
}
r1->next=NULL;
}
void Show(LinkNode *&L){
int i;
while(L->next!=NULL){
printf("%d ",L->next->data);
L=L->next;
}
}
int main(int argc, char *argv[])
{
struct LinkNode *L,*L1,*L2;
int a[8]={1,2,3,4,5,6,7,8};
CreateLinkNode(L,a,8);
Split(L,L1,L2);
printf("输出L1:") ;
Show(L1);
printf("\n输出L2:");
Show(L2);
printf("\n");
return 0;
}
输出L1:1 3 5 7
输出L2:8 6 4 2
请按任意键继续. . .