2213: 链表的拆分(线性表)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 19 Solved: 14
[ Submit][ Status][ Web Board]
Description
设 Listhead为一单链表的头指针,单链表的每个结点由一个整数域DATA和指针域NEXT组成,整数在单链表中是无序的。编一函数,将 Listhead链中结点分成一个奇数链和一个偶数链,分别由P,Q指向,每个链中的数据按由小到大排列。程序中不得使用 NEW过程申请空间。
Input
输入长度n:9
输入数据:2 3 5 1 4 17 23 14 19
Output
1 3 5 17 19 23
2 4 14
Sample Input
9
12 3 6 7 16 22 27 45 57
Sample Output
3 7 27 45 57
6 12 16 22
#include<iostream> #include<stdlib.h> #include <stdio.h> using namespace std; typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; } LinkList; void CreatList(LinkList *&L) { LinkList *s,*r; int i,a[100],n; L=(LinkList *)malloc(sizeof(LinkList)); r=L; scanf("%d",&n); for(i=0; i<n; i++) { scanf("%d",&a[i]); s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; r->next=s; r=s; } r->next=NULL; } void DispList(LinkList *&L) { LinkList *p=L->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } void Divice(LinkList *L,LinkList *&L1,LinkList *&L2) { LinkList *p1,*p2,*t,*p; L1=(LinkList *)malloc(sizeof(LinkList)); L1->next=NULL; p1=L1; L2=(LinkList *)malloc(sizeof(LinkList)); L2->next=NULL; p2=L2; p=L->next; while(p!=NULL) { t=(LinkList *)malloc(sizeof(LinkList)); t->next=NULL; t->data=p->data; if((t->data)%2==0) { p1->next=t; p1=t; } else { p2->next=t; p2=t; } p=p->next; } } void sort(LinkList *&L) { LinkList *p,*pre,*q; p=L->next->next; L->next->next=NULL; while(p!=NULL) { q=p->next; pre=L; while(pre->next!=NULL&&pre->next->data<p->data) pre=pre->next; p->next=pre->next; pre->next=p; p=q; } } int main() { LinkList *L,*L1,*L2; CreatList(L); Divice(L,L1,L2); sort(L2); DispList(L2); sort(L1); DispList(L1); return 0; }