PPT例2.6描述了释放某个不带头结点的单链表L中所有结点的递归算法,在此基础上请再设计一个递归创建L的算法(L不带头结点)。以每个人的学号为链表内容,例如学号为2241910101,共有10位数,每一个数作为单链表L的结点data域的值依次输入内容创建链表L。 要求: (1)递归创建L (2)遍历L,依次输出结点内容,以验证创建过程是否正确(此过程可以用非递归方式实现)。 (3)递归释放L。
时间: 2023-04-10 09:03:16 浏览: 89
试设计实现在单链表中删去值相同的多余结点的算法。
答案:
好的,我可以回答这个编程类的问题。
以下是递归创建L的算法:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createList(int n) {
if (n == 0) {
return NULL;
}
Node *head = (Node *)malloc(sizeof(Node));
scanf("%d", &head->data);
head->next = createList(n - 1);
return head;
}
void printList(Node *head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
void freeList(Node *head) {
if (head == NULL) {
return;
}
freeList(head->next);
free(head);
}
int main() {
int n;
scanf("%d", &n);
Node *head = createList(n);
printList(head);
freeList(head);
return 0;
}
```
这个算法会递归创建一个不带头结点的单链表L,每个结点的data域为一个学号。然后它会遍历L并输出每个结点的内容,最后递归释放L。
注意,这个算法并没有进行输入数据的验证,所以如果输入的数据不符合要求,程序可能会出错。
阅读全文