两个单链表顺序合并的一个问题··

[复制链接]
查看11 | 回复1 | 2011-5-17 04:39:39 | 显示全部楼层 |阅读模式
#include\"stdio.h\"
#include\"malloc.h\"
typedefintElemType;

typedefstructLNode
{
ElemTypedata;
structLNode*next;
}LNode,*linklist;

voidcreatelist(linklist
linklistp;
        L=(linklist)malloc(sizeof(LNode));
       
        linklistr;
        r=L;
        for(i=0;in;i)
        {
        p=(linklist)malloc(sizeof(LNode));
        scanf(\"%d\",data);
        r-next=p;r=p;        }
        printf(\"该单链表的元素为:\");
p=L-next;
        for(i=0;in;i)
        {printf(\"%d\",p-data);
        p=p-next;}
        printf(\"\\n\");

}

intListinsert_L(linklistintj;
p=L;j=0;
while(pi-1){p=p-next;j;}
if(!p||ji-1)return0;
s=(linklist)malloc(sizeof(LNode));
s-data=e;s-next=p-next;p-next=s;
p=L-next;
printf(\"插入后单链表的元素为:\");
for(j=0;jn1;j)
{printf(\"%d\",p-data);
        p=p-next;}
        printf(\"\\n\");
        return1;
}

intListdelete_L(linklistintj;
p=L;j=0;
while(p-nexti-1){p=p-next;j;}
if(!(p-next)||ji-1)return0;
q=p-next;p-next=q-next;e=q-data;free(q);
p=L-next;
printf(\"删除后单链表的元素为:\");
for(j=0;jn;j)
{printf(\"%d\",p-data);
        p=p-next;}
        printf(\"\\n\");
        return1;
}

voidMergeList_L(linklistintj;
Lc=(linklist)malloc(sizeof(LNode));
pa=La-next;pb=Lb-next;
Lc=pc=La;
while(padata=pb-data){pc-next=pa;pc=pa;pa=pa-next;}
else{pc-next=pb;pc=pb;pb=pb-next;}}
pc-next=pa?pa:pb;
free(Lb);
p=Lc-next;
for(j=0;jn1n2;j)
{printf(\"%d\",p-data);
        p=p-next;}
        printf(\"\\n\");
}

voidmain()
{
        linklistLa,Lb,Lc;
        intn1,n2,m,n,s,a;
        printf(\"请输入单链表La的个数:\");
scanf(\"%d\",
        printf(\"输入单链表La的元素:\");
        createlist(La,n1);
        printf(\"请输入单链表Lb的个数:\");
scanf(\"%d\",
        printf(\"输入单链表Lb的元素:\");
createlist(Lb,n2);
        printf(\"请输入向La中插入的元素及位置:\");
        scanf(\"%d%d\",
Listinsert_L(La,n,m,n1);
printf(\"请输入向La中删除的元素的位置:\");
scanf(\"%d\",
        Listdelete_L(La,s,a,n1);
        printf(\"La与Lb合并后的链表Lc为:\\n\");
MergeList_L(La,Lb,Lc,n1,n2);
}

前面没问题,主要是合并的那个函数,我不晓得哪里出问题了,望高手指教挨·在线等··
回复

使用道具 举报

千问 | 2011-5-17 04:39:39 | 显示全部楼层
帮你改了,自己调试下,应该没问题!
voidIntSLList::formalMerge(IntSLListlist1,IntSLListlist2){
IntSLLNode*p=list1.head;
IntSLLNode*q=list2.head;
IntSLListlist3;

while((p!=0)info==q-info){
list3.addToTail(p-info);
list3.addToTail(q-info);
p=p-next;
q=q-next;
}
elseif(p-infoq-info){
list3.addToTail(p-info);
p=p-next;
}
elseif(p-infoq-info){
list3.addToTail(q-info);
q=q-next;
}
//当一个链表已经到尾部了,处理另一个链表剩下的数据
while(p==0info);
q=q-next;
}
while(q==0info);
p=p-next;
}
}
head=list3.head;//将头指针指向新链表
tail=list3.tail;//该句写不写无所谓的,只是为了突出尾巴:)
}

intmain()
{
IntSLListlist1,list2,list3,list4;
list1.addToTail(1);
list1.addToTail(3);
list1.addToTail(5);
list1.addToTail(7);
list2.addToTail(2);
list2.addToTail(4);
list2.addToTail(6);
list2.addToTail(8);
list1.outputList();
list3.formalMerge(list1,list2);
list3.outputList();
return0;
}










<h4class=\"ask\">追问


额···这个是完全改了··我这个是学数据结构的时候的问题··他书上上面是写的我那种··能不能帮我看看我那个MergeList_L函数要是改的话···那个细节要动··那个输出来不是顺序合并··我没搞懂挨·
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行