逆序建立链表 分数 10 作者 zy 单位 安阳工学院 本题要求实现,建立一个链表,按输入数据的逆序输出。 函数接口定义: struct ListNode *create(); 函数create利用scanf从输入中获取一系列正整数,当读到-1时表示输入结束。按输入数据的逆序建立一个链表,并返回链表头指针。 链表节点结构定义如下: struct ListNode { int data; struct ListNode *next; }; 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> struct ListNode { int data; struct ListNode *next; }; struct ListNode *create(); int main() { struct ListNode *p, *head = NULL; head = create(); p = head; while(p != NULL ) { printf("%d ", p->data); p = p->next; } printf("\n"); return 0; } /* 你的代码将被嵌在这里 */ 输入样例: 在这里给出一组输入。例如: 1 2 3 4 5 6 7 -1
时间: 2024-01-12 17:04:44 浏览: 92
根据题目要求,我们需要按输入数据的逆序建立一个链表,并返回链表头指针。具体实现过程如下:
1. 定义一个头结点和一个当前节点,初始时它们都指向 NULL。
2. 从输入中读取一个节点的值,创建一个新节点,将新节点的 next 指向当前节点,将当前节点指向新节点。
3. 重复步骤 2 直到读取完所有节点。
4. 将头结点的 next 指向当前节点的 next,即为链表的头节点。
具体的代码如下:
```C
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *create() {
struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next = NULL;
struct ListNode *cur = NULL;
while (true) {
int val;
scanf("%d", &val);
if (val == -1) break;
struct ListNode *node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->data = val;
node->next = cur;
cur = node;
}
head->next = cur;
return head->next;
}
int main() {
struct ListNode *p, *head = NULL;
head = create();
p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
```
在这个代码中,我们定义了一个结构体 ListNode 来表示链表中的节点,其中 data 表示节点的值,next 表示指向下一个节点的指针。create 函数用于逆序建立链表,其返回头节点。主函数中我们先使用 create 函数建立链表,然后遍历链表输出每个节点的值。
阅读全文