合并两个有序链表后,冒泡逆序排序,不知道为何没逆序


#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"); 
}

img

已经定义了全局变量 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;
}

好家伙,你这写的可真够复杂的。可读性极差。
你的冒泡算法肯定错了,双重循环里相当于什么也没做。
还有题目说合并两个有序列表后采用冒泡进行逆序,应该是把两个有序合并成一个有序,然后再逆转,而不是简单的拼凑吧。