70,039
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include <stdlib.h>
#define uint unsigned int
#define uchar unsigned char
#define N 10 //N为链表中数据元素的个数
struct node
{
int data;
struct node *next;
};
typedef struct node NODE;
NODE *head,*s;
NODE *p1;
NODE *A,*B;
NODE *r,*p,*q;
NODE *creatlink2()
{
NODE *p=NULL;
int num;
//head=(NODE *)malloc(sizeof(NODE));
head = NULL;
scanf("%d",&num);
while(num!=0)
{
s=(NODE *)malloc(sizeof(NODE));
s->data=num;
if (p) p->next=s;
p = s;
if (head==NULL) head = p;
scanf("%d",&num);
}
p->next=NULL;
return head;
}
void deletelink(NODE* lnk)
{
NODE *p = lnk;
while (p) {
NODE* t = p;
p=p->next;
free(t);
}
}
int length()
{
NODE *p;
int j;
p=head;
j=0;
while(p!=NULL)
{
p=p->next;
j++;
}
return (j-1);
}
NODE* split(NODE* A)
{
NODE *B=NULL;
NODE *pa=NULL; //pa is the tail of new A
NODE *pb=NULL; //pb is the tail of B
NODE *p=NULL; //pa is the head of old A
if (A) B=p=A->next;
else return B;
pa = A;
pb = B;
while (p != NULL){
NODE* pnext = p->next;
pa->next = p->next;
if (pnext) pb->next = pnext->next;
else break;
p = pnext->next;
pa = pnext;
if (p) pb = p;
}
if (pa) pa->next = NULL;
if (pb) pb->next = NULL;
return B;
}
void prtlink(NODE*lnk)
{
NODE *p = lnk;
while (p) {
printf("%d, ",p->data);
p=p->next;
}
}
int main()
{
uchar i;
int k;
NODE*A = creatlink2();
NODE*B=NULL;
prtlink(A);
printf("\n");
//k=length();
//printf("%d\n",k);
//disA();
B=split(A);
prtlink(A);
printf("\n");
prtlink(B);
deletelink(A);
deletelink(B);
getchar();
return 0;
}