#include <stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *next; } LinkList; void Create(LinkList *L,int a[],int n) { int i; LinkList *s,*r; L=(LinkList *)malloc(sizeof(LinkList)); L->data=a[0]; L->next=NULL; r=L; for(i=1; i<n; ++i) { s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; r->next=s; r=s; } r->next=NULL; } int count(LinkList *L) { if(L==NULL) return 0; else return count(L->next)+1; } void DispList(LinkList *L) { if(L == NULL) return; else { count(L->data); // 调用计数函数 DispList(L->next); // 递归遍历链表 } } int main() { LinkList *L; int a[10]= {1,2,3,4,5,6,7,8,9,10};//作为预设单链表中的data值 Create(L,a,10);//尾插法将a数组中的值插入链表 printf("单链表为: %d\n"); DispList(L); printf("节点个数为:\n"); return 0; }
时间: 2024-03-07 22:49:19 浏览: 71
这段代码存在问题,主要是在 Create 函数中传入的 LinkList 指针没有被正确赋值,导致后续的操作都无法进行。此外,在 main 函数中调用 DispList 函数时没有传入链表指针,应该传入 L。下面是修改后的代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
} LinkList;
void Create(LinkList **L, int a[], int n)
{
int i;
LinkList *s, *r;
*L = (LinkList *)malloc(sizeof(LinkList));
(*L)->data = a[0];
(*L)->next = NULL;
r = *L;
for(i = 1; i < n; ++i)
{
s = (LinkList *)malloc(sizeof(LinkList));
s->data = a[i];
r->next = s;
r = s;
}
r->next = NULL;
}
int count(LinkList *L)
{
if(L == NULL)
return 0;
else
return count(L->next) + 1;
}
void DispList(LinkList *L)
{
if(L == NULL)
return;
else
{
printf("%d ", L->data); // 输出当前节点的值
DispList(L->next); // 递归遍历链表
}
}
int main()
{
LinkList *L;
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 作为预设单链表中的data值
Create(&L, a, 10); // 尾插法将a数组中的值插入链表
printf("单链表为: ");
DispList(L);
printf("\n节点个数为:%d\n", count(L));
return 0;
}
```
这个程序的作用是创建一个单链表,然后输出链表中的元素,并统计链表中节点的数量。程序中使用了尾插法创建链表,递归遍历链表输出元素,递归计算链表中节点数量等操作。
阅读全文