在天勤数据结构中的归并单链表中,merge中的参数列表使用了&,而&只能在C++中使用。
C中使用会报错[Error] expected ‘;’, ‘,’ or ‘)’ before ‘&’ token
代码:
#include "stdio.h"
#include <stdlib.h>
#define N 5
//建立结构体
typedef struct LNode {
int data;
struct LNode *next;
} LNode;
//归并
LNode* merge(LNode *A,LNode *B) {
LNode *C;
LNode *p = A->next;
LNode *q = B->next;
LNode *r;
C=A;
C->next = NULL;
//释放
free(B);
r=C;
//循环
while(p!=NULL && q!=NULL) {
//比较大小
if(p->data > q->data) {
r->next = q;
r = r->next;
q=q->next;
} else {
r->next = p;
r = r->next;
p=p->next;
}
}
if(p!=NULL) r->next = p;
if(q!=NULL) r->next = q;
return C;
}
//创建单链表
LNode* cLNode(LNode *C,int a[],int n) {
LNode *r,*s;
int i;
C = (LNode*)malloc(sizeof(LNode));
C->next = NULL;
r = C;
for(i = 0; i < N; ++i) {
s= (LNode*)malloc(sizeof(LNode));
s->data = a[i];
s->next = NULL;
r->next = s;
r = r->next;
}
r->next = NULL;
return C;
}
//输出单链表
void printLNode(LNode *A,int n) {
int i;
LNode *r;
r = A->next;
for(i = 0; i < n; ++i) {
printf("%d",r->data);
r = r->next;
}
printf("\n");
}
int main() {
//初始化
int i;
LNode *A,*B,*C;
LNode* merge(LNode *A,LNode *B);
LNode* cLNode(LNode *C,int a[],int n);
void printLNode(LNode *A,int n);
// 给定数组
int a[N] = {1,2,2,5,8};
int b[N] = {0,1,2,5,6};
// 创建单链表A,B
A = cLNode(A,a,N);
B = cLNode(B,b,N);
// 归并
C = merge(A,B);
// 输出
printLNode(C,N*2);
return 0;
}