题目
《算法笔记》练习题,详见http://codeup.hustoj.com/problem.php?cid=100000607&pid=2
代码
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE{
int data;
struct NODE *next;
}LinkList,*PLinkList;
void create_list(PLinkList *L,int n){
PLinkList node,p;
*L=(PLinkList)malloc(sizeof(LinkList));
(*L)->next=*L;
p=*L;
while(n--){
node=(PLinkList)malloc(sizeof(LinkList));
scanf("%d",&(node->data));
node->next=p->next;
p->next=node;
p=node;
}
}
/*两个链表都不为空*/
void merge_list(PLinkList src1,PLinkList src2,PLinkList dst){
PLinkList p,q;
p=src1;
q=src2;
while(p->next!=src1) p=p->next;
while(q->next!=src2) q=q->next;
dst->next=src1->next;
p->next=src2->next;
q->next=dst;
}
void print_list(PLinkList L){
PLinkList p;
p=L->next;
while(p->next!=L){
printf("%d ",p->data);
p=p->next;
}
printf("%d\n",p->data);
}
int main()
{
int n,m;
PLinkList L1,L2,L3;
scanf("%d",&n);
create_list(&L1,n);
scanf("%d",&m);
create_list(&L2,m);
create_list(&L3,0);
merge_list(L1,L2,L3);
print_list(L3);
return 0;
}
遇到的bugs和解决方法
bugs
- 编译不通过
- 程序一直运行,存在死循环
- 输出数据多了一个比较大的数据,少输出了一个链表数据
解决
- 编译错误是在代码编写的过程中出现了好多问题。malloc函数名写错;malloc参数把结构传进去了,应该传递一个字节数;*的优先级比->的低,应该仔细分析,最好加括号。
- 在合并链表的时候,临时指针记混、写反了,后面修改的时候也没全部改。
- 代码中头结点没有保存数据,只是为了方便,输出时却把头结点的当做数据输出了,所以多了一个没有意义的数据。