c程序:编写实现将两个已知的有序链表合并成一个有序链表的函数。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c程序:编写实现将两个已知的有序链表合并成一个有序链表的函数。相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <malloc.h>
struct intnode

int num;
intnode *next;
;
intnode *createlist(int n)

intnode *p,*head=NULL;
int i;
p=(intnode *)malloc(sizeof(intnode));
scanf("%d",&p->num);
p->next=NULL;
head=p;
for (i=1;i<n;i++)

p->next=(intnode *)malloc(sizeof(intnode));
p=p->next;
scanf("%d",&p->num);

p->next=NULL;
return head;

intnode *sumlist(intnode *a,intnode *b)

intnode *pa=a,*pb=b,*p,*head;
p=(intnode *)malloc(sizeof(intnode));
if (a->num<b->num)
p=a;pa=a->next;
else
p=b;pb=b->next;
p->next=NULL;
head=p;
while(pa!=NULL&&pb!=NULL)


if (pa->num<pb->num)

p->next=pa;
p=pa;
pa=pa->next;

else

p->next=pb;
p=pb;
pb=pb->next;


if(pb=NULL)
while (pa!=NULL)
p->next=pa;pa=pa->next;
else
while (pb!=NULL)
p->next=pb;pb=pb->next;
return head;

void main()

int N1,N2;
intnode *p1,*p2,*p;
scanf("%d%d",&N1,&N2);
p1=createlist(N1);
p2=createlist(N2);
p=sumlist(p1,p2);
while (p!=NULL)

printf("%d ",p->num);
p=p->next;

printf("\n");


我觉得没有问题,可是运行结果中总是少一段!!求大神指点

参考技术A if(pb=NULL)
!!!!!!!!!!!!!!!!!!!!!!!!!!!
if(pb==NULL)

A与B链表合并成C链表(链表的归并)

A与B链表合并成C链表(链表的归并)

已知两个有序递增A链表和B链表(非空),将两个链表合并为C链表(同为递增有序),需要我们对链表的概念有一定掌握

对节点所需条件以及节点之间建立关系有所掌握。

这个题的重点是,并没有说明两个链表的具体长度,即两个链表可能不一样长,所以,在处理的时候需要注意,当某一个链表

操作完毕,另一个链表剩下的部分则可以直接接入C链表当中。

 1 void merge(LNode *A,LNode *B,LNode *C)
 2 {
 3     LNode *p = A->next;        //p来跟踪A的最小值节点,
 4     LNode *q = B->next;        //q来跟踪B的最小值节点
 5     LNode *r;                //定义一个指针,用作C链表的游标
 6     C = A;                    //C指向A链表的头结点
 7     C->next = NULL;            //这里可以去掉,因为下面两个if必须有一个执行
 8     free(B);                //释放掉B头结点
 9     r = C;                    //游标指向C头结点
10     while(p!=NULL && q!=NULL)        //当两个链表其中一个没有到达最后
11     {
12         if(p->data <= q->data)
13         {
14             r->next = p;
15             p = p->next;
16             r = r->next;
17         }
18         else{
19             r->next = q;
20             q = q->next;
21             r = r->next;
22         }
23     }
24     r->next = NULL;            //C链表最后next指针指向空
25     
26     if(p!=NULL){
27         r->next = p;
28     }
29     if(q!=NULL)
30         r->next = q;
31 }

 

以上是关于c程序:编写实现将两个已知的有序链表合并成一个有序链表的函数。的主要内容,如果未能解决你的问题,请参考以下文章

Java实现两个递增有序链表合并成一个递增有序链表和两个非递减有序链表合成一个非递增有序链表

1.有序链表的合并

将两个顺序存储的有序表合并成一个有序表

两个有序单链表合并成一个有序单链表的java实现

怎么将两个顺序存储的有序表合并成一个有序表?

两个递增有序表合并成一个递增有序表