| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 515 人关注过本帖
标题:为什么LA链表插入LC,LB也插入LC链表中,最后输出LA链表值变了???
只看楼主 加入收藏
tp687192
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-4-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
为什么LA链表插入LC,LB也插入LC链表中,最后输出LA链表值变了???
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
typedef struct node
{
    int data;
    struct node *next;
}Node,*LinkList;
Node *create()//单链表的创建
{
    Node *head,*p,*q;
    int a,n;
    scanf("%d",&n);
    q=head=(Node *)malloc(sizeof(Node));
    printf("请输入链表中元素:");
    while(n--)
    {
        scanf("%d",&a);
        p=(Node *)malloc(sizeof(Node));
        p->next=NULL;
        p->data=a;
        q->next=p;
        q=q->next;
    }
    p->next=NULL;
    return(head);
}
void print(LinkList head)
{
    LinkList p=head;
    if(p->next==NULL)
        return;
    p=p->next;
    while(p)
    {
        printf("%d->",p->data);
        p=p->next;
    }
    printf("\b\b   \b\b\n");
}
void Sort(LinkList l)
{
    int temp;
    LinkList p=l->next,q;
    while(p)
    {
        q=p->next;
        while(q)
        {
            if(p->data>q->data)
            {
                temp=p->data;
                p->data=q->data;
                q->data=temp;
            }
            q=q->next;
        }
        p=p->next;
    }
}
void MergeLinkList1(LinkList l)
{
    Node *p,*q,*r;
    p=l->next;
    while(p)
    {
        q=p;
        while(q->next)
        {
            if(q->next->data==p->data)
            {
                r=q->next;
                q->next=r->next;
                free(r);
            }
            else q=q->next;
        }
        p=p->next;
    }
}
void InsList(LinkList L1, LinkList L2)
{
    node *p=NULL;
    for(p=L1;p->next!=NULL;p=p->next);

    p->next=L2->next;
}
LinkList MergeLinkList2(LinkList LA,LinkList LB,LinkList LC)//合并单链表
{
    Sort(LA);
    Sort(LB);
    Node *pa,*pb,*r;
    pa=LA->next;
    pb=LB->next;
    LC=LA;
    LC->next=NULL;
    r=LC;
    while(pa!=NULL&&pb!=NULL)
    {
        if(pa->data<=pb->data)
        {
            r->next=pa;
            r=pa;
            pa=pa->next;
        }
        else
        {
            r->next=pb;
            r=pb;
            pb=pb->next;
        }
    }
    if(pa!=NULL)
        r->next=pa;
    else
        r->next=pb;
    free(LB);
    return(LC);
}
/*void ClearList(LinkList L)
{
    LinkList p,q;
    p=L->next;
    while(p)
    {
        p=q;
        q=p->next;
        free(p);
    }
    L->next=NULL;
}*/
int main()
{
    printf("输入A链表的元素的个数:");
    LinkList LA=create();

    printf("输入B链表的元素的个数:");
    LinkList LB=create();

    Node LC;

    LC.next=NULL;
    InsList(&LC,LA);
    InsList(&LC,LB);


    //MergeLinkList1(&LC);
    if (&LC)
        print(&LC);
    else
        printf("合并失败");

    /* LC.next=NULL;

    LinkList c=MergeLinkList2(LA,LB,&LC);
    if(c)
        print(c);
    else
        printf("合并失败");*/
        print(LA);
        print(LB);

    return 0;

}
搜索更多相关主题的帖子: 元素 include create 元素 include create 
2013-04-08 19:56
tp687192
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-4-8
收藏
得分:0 
void InsList(LinkList L1, LinkList L2)
 {
     node *p=NULL;
     for(p=L1;p->next!=NULL;p=p->next);
 
    p->next=L2->next;
 }
应该是这函数出问题了。。。
2013-04-08 20:08
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:20 
看了下,你为啥要写这个函数呢

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-04-10 09:24
快速回复:为什么LA链表插入LC,LB也插入LC链表中,最后输出LA链表值变了???
数据加载中...
 
   



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

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