标题:链表合并,编译可以,无法输出是怎么回事?
只看楼主
好烦、
Rank: 2
等 级:论坛游民
帖 子:78
专家分:72
注 册:2020-10-10
结帖率:87.5%
已结贴  问题点数:20 回复次数:9 
链表合并,编译可以,无法输出是怎么回事?
已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。
我的代码:
程序代码:
#include<stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct Stu
{
    int id;
    int results;
    struct Stu *next;
}Stu;

Stu *create_Stu(int n)
{
    Stu *head=(Stu*)malloc(sizeof(Stu));
    if(head==NULL)
        return NULL;
    head->id=-1;
    head->results=-1;
    head->next=NULL;
    Stu *temp=head;
    int i;
    for(i=0;i<n;i++)
    {
        Stu *new_node=(Stu*)malloc(sizeof(Stu));
        if(new_node==NULL)
            return 0;
        scanf("%d",&new_node->id);
        scanf("%d",&new_node->results);
        new_node->next=NULL;
        temp->next=new_node;
        temp=new_node;
    }
    return head;
}

Stu *merge_Stu(Stu *s1,Stu *s2)
{
    if(s1==0||s2==0)
        return 0;
    Stu *s1_tail=s1;    
    while(s1_tail->next!=0)
        s1_tail=s1_tail->next;
    s1_tail->next=s2->next;
    free(s2);
    return s1;    
}

void sort_Stu(Stu *stu)
{
    if(stu==0)
        return;
    Stu *t1,*t2,*temp,t;
    t1=t2=temp=0;
    for(t1=stu->next;t1->next!=0;t1=t1->next)
    {
        temp=t1;
        for(t2=t1->next;t2!=0;t2=t2->next)
        {
            if(temp->id>t2->id)
                temp=t2;
        }
        if(temp!=t1)
        {
            t=*t1;
            *t1=*temp;
            *temp=t;
            t.next=t1->next;
            t1->next=t2->next;
            t2->next=t.next;
        }
    }    
}

void print_Stu(Stu *s)
{
    if(s==0||s->next!=0)
        return;
    Stu *node=s->next;
    while(node!=0)
    {
        printf("%d %d\n",node->id,node->results);
        node=node->next;
    }
}
void destory_Stu(Stu *s)
{
    if(s==0)
        return;
    Stu *p=s;
    Stu *p1=0;
    while(p!=0)
    {
        p1=p->next;
        free(p);
        p=p1;
    }
}


int main ()
{
    int N, M;
    scanf("%d%d", &N, &M);

 
    //创建两个链表
    Stu *students1 = create_Stu(N);
    Stu *students2 = create_Stu(M);

 
    //合并两个链表
    Stu *students = merge_Stu(students1, students2);

 
    //对新链表中的内容按学号升序排列并打印
    sort_Stu(students);
    print_Stu(students);

 
    destory_Stu(students);
    return 0;

 } 
搜索更多相关主题的帖子: return temp Stu next 链表 
2021-01-10 20:28
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:5 
print_Stu里if(s==0||s->next!=0)直接return了,
没明白第二个条件干啥的?s的下一个不为空为啥要return?
2021-01-10 21:29
好烦、
Rank: 2
等 级:论坛游民
帖 子:78
专家分:72
注 册:2020-10-10
得分:0 
回复 2楼 apull
额,这是个意外,不过我改正过来过后还是一样不行
2021-01-10 21:56
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:10 
问题出在排序上呢

程序代码:
void sort_ Stu(Stu *stu)
{
    if(stu==0)
        return;
    
    Stu *t1,*t2, temp, *tp1.*tp2;
    t1=t2=0;
    
    for(t1=stu->next;t1->next !=0;t1=t1->next)
    {
        for(t2=t1->next;t2!=0; t2=t2->next)
        {
            if(t1->id>t2->id)
            {
                tp1=t1->next;
                tp2=t2->next;
                temp=*t2;
                *t2=*t1;
                *t1=temp;
                t1->next=tp1;
                t2->next=tp2;
            }
        }
}
2021-01-10 23:37
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:5 
你的排序里第2个if里t2等于0的
2021-01-10 23:41
好烦、
Rank: 2
等 级:论坛游民
帖 子:78
专家分:72
注 册:2020-10-10
得分:0 
回复 4楼 apull
Soga!谢谢你
2021-01-11 11:59
好烦、
Rank: 2
等 级:论坛游民
帖 子:78
专家分:72
注 册:2020-10-10
得分:0 
回复 5楼 apull
谢谢!
2021-01-11 12:00
好烦、
Rank: 2
等 级:论坛游民
帖 子:78
专家分:72
注 册:2020-10-10
得分:0 
回复 5楼 apull
为什么t2=0啊?t2不是赋值为t1->next的吗
2021-01-11 12:03
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:0 
第二个for循环结束才进行替换,循环结束条件就是t2=0
2021-01-11 13:22
好烦、
Rank: 2
等 级:论坛游民
帖 子:78
专家分:72
注 册:2020-10-10
得分:0 
回复 9楼 apull
ooo哦哦哦!
2021-01-11 18:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504602-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.152551 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved