#include<stdio.h>
#include<stdlib.h>
int count=1;
typedef int DataType;
typedef struct Node{
DataType data;
struct Node *link;
}LinkList;
LinkList *Create_List(){
LinkList *head,*p,*q;
int x,flag=1;
head=(LinkList*)malloc(sizeof(LinkList));//为头结点分配存储空间
head->link=NULL;
q=head;
while(flag)
{
scanf("%d",&x);
if(x!=-1)
{
p=(LinkList*)malloc(sizeof(LinkList));
p->data=x;
q->link=p;
q=p;
count++;
}
else {
flag=0;
q->link=NULL;
}
}
return head;
}
main(void){
LinkList *a,*b,*c,*e,*h,*t;
int i,min,count=1,j;
a=Create_List();
h=a;
c=a;
a=a->link;
while(a!=NULL){
e=a;
a=a->link;
}
printf("\n");
b=Create_List();
e->link=b->link;
c=c->link;
while(c!=NULL)
{
printf("%d\n",c->data);
c=c->link;
}
c=h->link;
for(i=1;i<count;i++){
for(j=0;j<count-i;j++){
t=c->link;
if((c->data)<(t->data)){
min=c->data;
t->data=c->data;
c->data=min;
}
c=c->link;
}
}
h=h->link;
while(h!=NULL)
{
printf("%d",h->data);
h=h->link;
}
printf("\n");
}
已经定义了全局变量 count ,在主函数里又定义局部变量 count, 其他问题见注释,按题主的思路修改,供参考:
#include<stdio.h>
#include<stdlib.h>
int count = 0;//修改
typedef int DataType;
typedef struct Node {
DataType data;
struct Node* link;
}LinkList;
LinkList* Create_List() {
LinkList* head, * p, * q;
int x, flag = 1;
head = (LinkList*)malloc(sizeof(LinkList));//为头结点分配存储空间
head->link = NULL;
q = head;
while (flag)
{
scanf("%d", &x);
if (x != -1)
{
p = (LinkList*)malloc(sizeof(LinkList));
p->data = x;
q->link = p;
q = p;
count++;
}
else {
flag = 0;
q->link = NULL;
}
}
return head;
}
int main(void) {
LinkList* a, * b, * c, * e, * h, * t;
int i, min, j; //count = 1,修改
a = Create_List();
h = a;
c = a;
a = a->link;
while (a != NULL) {
e = a;
a = a->link;
}
printf("\n");
b = Create_List();
e->link = b->link;
c = c->link;
while (c != NULL)
{
printf("%d\n", c->data);
c = c->link;
}
c = h->link;
for (i = 0; i < count - 1; i++) {//修改
t = c->link;//修改
for (j = 0; j < count - i - 1; j++) {//修改
if ((c->data) < (t->data)) {
min = c->data;
c->data = t->data;//t->data = c->data;修改
t->data = min; //c->data = min;修改
}
t = t->link;//修改
}
c = c->link;//修改
}
h = h->link;
while (h != NULL)
{
printf("%d ", h->data);
h = h->link;
}
printf("\n");
return 0;
}
好家伙,你这写的可真够复杂的。可读性极差。
你的冒泡算法肯定错了,双重循环里相当于什么也没做。
还有题目说合并两个有序列表后采用冒泡进行逆序,应该是把两个有序合并成一个有序,然后再逆转,而不是简单的拼凑吧。