#include <stdio.h>
#include <stdlib.h>
#define N 5
#define M 3
typedef struct LNode {
int data;
struct LNode *next;
} LNode,*Linklist;
void main(){
LNode *La,*Lb,*Lc;
LNode *pa,*pb,*pc;
int i,j,e;
// create Link a
La = (Linklist)malloc(sizeof(LNode));
La->next = NULL;
for(i = 0; i < N ; i++){
pa = (Linklist)malloc(sizeof(LNode));
scanf(“%d”,&pa->data);
pa->next = La->next;
La->next = pa;
}
// create Link b
Lb = (Linklist)malloc(sizeof(LNode));
Lb->next = NULL;
for(j = 0; j < M ; j++){
pb = (Linklist)malloc(sizeof(LNode));
scanf(“%d”,&pb->data);
pb->next = Lb->next;
Lb->next = pb;
}
// combine two Links
Lc = pc = La;
while (pa&&pb){
if(pa->data <= 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);
}
// print the result
for(e= 0; e < M+N-1 ; e++){
printf(“%d”,Lc->next->data);
Lc = Lc->next;
}
printf(“%d”,Lc->data);
}
本人是要将两个单链表通过从小到大的顺序合并成一个单链表,编译无错误,运行时出现:
#include <stdlib.h>
#define N 5
#define M 3
typedef struct LNode {
int data;
struct LNode *next;
} LNode,*Linklist;
void main(){
LNode *La,*Lb,*Lc;
LNode *pa,*pb,*pc;
int i,j,e;
// create Link a
La = (Linklist)malloc(sizeof(LNode));
La->next = NULL;
for(i = 0; i < N ; i++){
pa = (Linklist)malloc(sizeof(LNode));
scanf(“%d”,&pa->data);
pa->next = La->next;
La->next = pa;
}
// create Link b
Lb = (Linklist)malloc(sizeof(LNode));
Lb->next = NULL;
for(j = 0; j < M ; j++){
pb = (Linklist)malloc(sizeof(LNode));
scanf(“%d”,&pb->data);
pb->next = Lb->next;
Lb->next = pb;
}
// combine two Links
Lc = pc = La;
while (pa&&pb){
if(pa->data <= 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);
}
// print the result
for(e= 0; e < M+N-1 ; e++){
printf(“%d”,Lc->next->data);
Lc = Lc->next;
}
printf(“%d”,Lc->data);
}
本人是要将两个单链表通过从小到大的顺序合并成一个单链表,编译无错误,运行时出现:
解决方案:5分
if(pa->data <= pb->data){ pc->next = pa;//这段可能会有问题,原因是你的全部节点都没有做脱链处理。 pc = pa; pa = pa->next; } else{ pc->next = pb; pc = pb; pb = pb->next; }
合并链表 可以分为,破坏式合并,和非破坏式合并。
破坏式合并,原链表被拆开, 节点从链表中取出。
1)一种方法是每个节点从链上取出,保持链的完整(取下节点后,还是一个链表)
然后,插入到新链表中
2)第二种方法是,一条链作基础,从另一条链上取出节点,插入进去。
这些是利用原来节点,破坏性合并
3)还有一种,非破坏式合并,分配新节点,每次从链表中取数据。合并到链表中。
得到一个新链表,原链表以及节点保持不变。
解决方案:15分
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。