| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 379 人关注过本帖
标题:合成两个有序链表不知道错在哪里,求高手帮忙!
取消只看楼主 加入收藏
lxslxs123
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-11-17
结帖率:80%
收藏
已结贴  问题点数:25 回复次数:3 
合成两个有序链表不知道错在哪里,求高手帮忙!
程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
    int data;
    struct node* next;
}lnode,*linklist;

 
linklist list_create(int n);
void list_print(linklist L);
linklist list_together(linklist L1,linklist L2);

 
int main()
{
    linklist L1=list_create(3);
    linklist L2=list_create(3);//创建两个新的链表
 
    list_print(list_together(L1,L2));//输出合成后的链表
    return 0;
}

 
linklist list_create(int n)//建立新的链表
{
    int i;
    linklist L,q,p;
    L=(linklist)malloc(sizeof(lnode));
    if(!L)return 0;
    L->next=NULL;
    p=L;
    for(i=1;i<=n;i++)
    {
        q=(linklist)malloc(sizeof(lnode));
        if(!q)return 0;
        printf("Please input the NO.%d number:",i);
        scanf("%d",&q->data);
        p->next=q;
        q->next=NULL;
        p=q;
    }
    return L;
}

 
linklist list_together(linklist L1,linklist L2)//合成1,2两个有序链表
{
    linklist p1,p2,p3,L3;
    p1=L1->next;
    p2=L2->next;
    L3=p3=(linklist)malloc(sizeof(lnode));
    if(!p3)exit(1);
    L3->next=p3->next=NULL;

 
    while(p1&&p2)//将L1,L2两个链表里的值从第一个开始比较
    {
        if(p1->data<=p2->data)
        {
            p3->next=p1;
            p3=p3->next;
            p1=p1->next;
        }
        if(p2->data<=p1->data)
        {
            p3->next=p1;
            p3=p3->next;
            p1=p1->next;
        }
    }//谁的值更小就将它赋给L3
        //两个链表总会有一个先空,下面判断是哪个链表先空的
    if(p1==NULL)
    {
        p3->next=p2;
        free(L1);L1=NULL;
    }
    if(p2==NULL)
    {
        p3->next=p1;
        free(L2);L2=NULL;
    }//将L3连接到没空的那个链表头上,再释放掉另一个链表
    return L3;
}

 
void list_print(linklist L)//将合成后的链表输出
{
    linklist p=L->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}

图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: color 
2014-12-27 20:46
lxslxs123
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-11-17
收藏
得分:0 
回复 2楼 longwu9t
对!是这样的!就是两个有序数组合并,能麻烦指点一下么,非常感激!
2014-12-27 21:19
lxslxs123
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-11-17
收藏
得分:0 
回复 4楼 longwu9t
非常感谢您的回答!但我刚想了一下觉得还是有些小问题
1.就是你在together函数里没有free(L3)是不是因为函数调用完了这个指针会直接free掉,根本不用自行free?
2.就是我觉得无论在主函数还是together函数里都没必要给L3单独开辟一个空间?
希望您能帮我!
2014-12-27 22:04
lxslxs123
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-11-17
收藏
得分:0 
回复 6楼 longwu9t
没事,还是很谢谢你!
2014-12-28 11:19
快速回复:合成两个有序链表不知道错在哪里,求高手帮忙!
数据加载中...
 
   



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

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