user-0 提问: 单链表的合并

回复:
user: user-1
content: //合并两个有序的单链表 linklist mergelinklist(linklist LA,linklist LB)     //将递增有序的单链表LA和LB合并成一个递增有序的单链表LC {     node *pa,*pb, *t;     linklist LC,r;     //r=(linklist)malloc(sizeof(node));//多余       //将LC初始值空表，pa和pb分别指向两个单链表LA,LB中的第一个节点，r初值为LC且r永远指向LC的表尾     pa=LA->next;     pb=LB->next;     LC=LA;     LC->next=NULL;     r=LC;       while (pa && pb) {         if (pa->data == pb->data) {             r->next = pa;             r = pa;             pa = pa->next;              t = pb;             pb = pb->next;             free(t);         }         else if (pa->data < pb->data) {             r->next = pa;             r = pa;             pa = pa->next;         } else {             r->next = pb;             r = pb;             pb = pb->next;         }     }     r->next = NULL;      if (pa)         r->next = pa;     if (pb)         r->next = pb;      //当两个标中均未处理完是，比较选择较小的节点插入到新表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)       //若表L未完，将表LA的后续元素链到新表LC的表尾         r->next=pa;     else         //否则将LB中的后续元素链到新表LC表尾         r->next=pb;         */     free(LB);     return LC; } 修改一下r变量不需要申请空间哦。

user: user-1
content: #include<stdio.h> #include<stdlib.h> #include<malloc.h>  //单链表的定义 typedef int elemtype; typedef struct node {     elemtype data;     struct node *next; }node,*linklist;  //单链表的初始化 void initlist(linklist *l) {     //l=(linklist)malloc(sizeof(node));     //(l)->next=NULL;     (*l)->next=NULL; } //头插法建立单链表 void createfromhead(linklist l) {     node *s;     char c;     //int flag=1;     //while(flag)     while(1)     {         if ((c = getchar()) == '0')             break;         s=(node*)malloc(sizeof(node));         s->data=c;         s->next=l->next;         l->next=s;         /*         c=getchar();         if(c!='0')         {             s=(node*)malloc(sizeof(node));             s->data=c;             s->next=l->next;             l->next=s;         }         else             flag=0;             */         //getchar(); //接收换行符     } } //合并两个有序的单链表 linklist mergelinklist(linklist LA,linklist LB)     //将递增有序的单链表LA和LB合并成一个递增有序的单链表LC {     node *pa,*pb, *t;     linklist LC,r;     r=(linklist)malloc(sizeof(node));       //将LC初始值空表，pa和pb分别指向两个单链表LA,LB中的第一个节点，r初值为LC且r永远指向LC的表尾     pa=LA->next;     pb=LB->next;     LC=LA;     LC->next=NULL;     r=LC;       while (pa && pb) {         if (pa->data == pb->data) {             r->next = pa;             r = pa;             pa = pa->next;              t = pb;             pb = pb->next;             free(t);         }         else if (pa->data < pb->data) {             r->next = pa;             r = pa;             pa = pa->next;         } else {             r->next = pb;             r = pb;             pb = pb->next;         }     }     r->next = NULL;      if (pa)         r->next = pa;     if (pb)         r->next = pb;      //当两个标中均未处理完是，比较选择较小的节点插入到新表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)       //若表L未完，将表LA的后续元素链到新表LC的表尾         r->next=pa;     else         //否则将LB中的后续元素链到新表LC表尾         r->next=pb;         */     free(LB);     return LC; } void PrintList(linklist l) {     linklist p=l->next;     while(p)     {         printf("%c\n",p->data);         p=p->next;     } } //void main() int main(void) {     linklist LA,LB,LC;     LA= (linklist)malloc(sizeof(node));     LB= (linklist)malloc(sizeof(node));     //LC= (linklist)malloc(sizeof(node));     initlist(&LA);     initlist(&LB);     initlist(&LC);     createfromhead(LA);     PrintList(LA);     createfromhead(LB);     PrintList(LB);     //mergelinklist(LA,LB);     LC = mergelinklist(LA,LB);     PrintList(LC); }  供参考～  链表操作还需要再多下功夫，对比代码找一下自己的问题吧～

user: user-2
content: 错误不少，LA已经通过malloc初始化了，再在initlist里面malloc有何用？而且initlist参数是node* ,在initlist里面的malloc根本无法影响外边的LA 而且，你的合并是把两个有序的链表合并，但是createfromhead获得的并不是有序链表，合并必然不对

user: user-0
content: @自信男孩 你的那个代码好像不对这，执行结果的时候输不进去数字