/* 设计一个算法,将带头结点的单链表A分解成两个结构相同的单链表B和C 使得B中的元素是A中大于等于0的元素,C中的元素是A中小于0的元素。 要求存储空间仍使用A的存储空间。 */ #include<stdio.h> typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; /* 初始化单链表 */ int InitList(LinkList &L){ L=new LNode; L->next=NULL; return 1; } //创建链表 void CreateList(LinkList &L,int n){ L=new LNode; L->next=NULL; for(int i=0;i<n;i++){ printf("请输入第%d个元素的值:",i+1); struct LNode *p; p=new LNode; scanf("%d",&p->data); p->next=L->next; L->next=p; } } //遍历 void TraveList(LinkList L){ struct LNode *p; p=L->next; while(p){ printf("%d ",p->data); p=p->next; } printf("\n"); } void CutList(LinkList &A,LinkList &B,LinkList &C){ struct LNode *pa,*pb,*pc; pa=A->next; //B=C=A; B=new LNode; C=new LNode; B->next=NULL; C->next=NULL; pb=B; pc=C; while(pa){ if(pa->data>=0){ pb->next=pa; pa=pa->next; pb=pb->next; pb->next=NULL;//这一句不能少 }else if(pa->data<0){ pc->next=pa; pa=pa->next; pc=pc->next; pc->next=NULL;//不能少 } } } int main(){ LinkList A,B,C; if(InitList(A)){ printf("链表A初始化成功!\n"); }else{ printf("链表A初始化失败!\n"); } if(InitList(B)){ printf("链表B初始化成功!\n"); }else{ printf("链表B初始化失败!\n"); } if(InitList(C)){ printf("链表C初始化成功!\n"); }else{ printf("链表C初始化失败!\n"); } printf("请输入链表A的长度:"); int n1; scanf("%d",&n1); CreateList(A,n1); printf("链表A的结构如下:\n"); TraveList(A); CutList(A,C); printf("B链表的结构如下:\n"); TraveList(B); printf("C链表的结构如下:\n"); TraveList(C); return 0; }
原文地址:https://www.jb51.cc/datastructure/382502.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。