标题:问个关于链表合并的问题
只看楼主
大大猫
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2011-8-19
结帖率:81.25%
已结贴  问题点数:20 回复次数:2 
问个关于链表合并的问题
请帮忙看下以下程序错没错,谢谢
srtuct stu
{
    int no;
    struct stu *next;
};
struct stu *insert(struct stu *ah,struct stu *bh)//ah和bh两个链表合并,按学号升序排列
{
    struct stu *pa1,*pa2,*pb1,*pb2;
    pa1=pa2=ah;
    pb1=pb2=bh;
    do
    {
        while((pb1->no>pa1->no)&&(pa1->next!=null))
        {
            pa2=pa1;
            pa1=pa1->next;
        }
        if(pb1->no<=pa1->no)
        {
            if(ah==pa1)
                ah=pb1;
            else
                pa2->next=pb1;
            pb1=pb1->next;
            pb2->next=pa1;
            pa2=pb2;
            pb2=pb1;
        }
    }while((pa1->next!=null)||(pa1==null&&pb1!=null));
    if((pb1!=null)&&(pb1->no>pa1->no)&&(pa1->next==null))
        pa1->next=pb1;
    return (ah);
}
搜索更多相关主题的帖子: insert while null 
2011-10-26 17:10
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
得分:10 
程序代码:
#include<stdio.h>
#include<malloc.h>
typedef struct stu////////////struct
{
    int no;
    struct stu *next;
}LNode,* LinkList;
void CreateList_L(LinkList &L,int n)              //CreateList_L() function
{
    int i;
    LNode *p,*q;
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    q=L;
    printf("请依次输入结点元素,以空格隔开\n");
    for(i=1;i<=n;++i)
    {
        p=(LinkList)malloc(sizeof(LNode));
//        fflush(stdin);
        scanf("%d",&p->no);                               //Reverse order inputing for Creating a LinkList
        p->next=NULL;
        q->next=p;
        q=p;
   
    }
    if(n) printf("链表创建成功!\n链表中的元素有:");
    else  printf("创建了一个空链表!\n");
}

struct stu *insert(struct stu *ah,struct stu *bh)//ah和bh两个链表合并,按学号升序排列
{
    struct stu *pa1,*pa2,*pb1,*pb2;
    pa1=pa2=ah;
    pb1=pb2=bh;
    do
    {
        while((pb1->no>pa1->no)&&(pa1->next!=NULL))
        {
            pa2=pa1;
            pa1=pa1->next;
        }
        if(pb1->no<=pa1->no)
        {
            if(ah==pa1)
                ah=pb1;
            else
                pa2->next=pb1;
            pb1=pb1->next;
            pb2->next=pa1;
            pa2=pb2;
            pb2=pb1;
        }
    }while((pa1->next!=NULL)||(pa1==NULL&&pb1!=NULL));
    if((pb1!=NULL)&&(pb1->no>pa1->no)&&(pa1->next==NULL))
        pa1->next=pb1;
//    k=ah->next;
    return (ah);////////
}
void Traverse_L(LinkList &L)
  {LNode *p;
   p=L->next;
   while(p!=NULL)
     {
       printf("%  d",p->no);
       p=p->next;
     }
   }
int main(void)
{
    LinkList L1,L2,L3;
    int InitLNodeNum1,InitLNodeNum2;                              //the Init LinkNode Numbers

    printf("请输入链表1的结点个数 ");
    scanf("%d",&InitLNodeNum1);
    CreateList_L(L1,InitLNodeNum1);
    Traverse_L(L1);
    printf("\n");

    printf("请输入链表2的结点个数 ");
//    fflush(stdin);
    scanf("%d",&InitLNodeNum2);
    CreateList_L(L2,InitLNodeNum2);
    Traverse_L(L2);
    printf("\n");
//    mergeList_L(L1,L2,L3);
    L3=insert(L1,L2);

    Traverse_L(L1);
    printf("\n");

    Traverse_L(L2);
    printf("\n");


//    L3=L3->next;
    Traverse_L(L3);
    printf("\n");


    return 0;
}
2011-10-27 09:41
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
得分:10 
回复 2楼 laznrbfe
还是有错误,,,
2011-10-27 09:42



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




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

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