[PTA]实验11-2-3 逆序数据建立链表
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PTA]实验11-2-3 逆序数据建立链表相关的知识,希望对你有一定的参考价值。
本题要求实现一个函数,按输入数据的逆序建立一个链表。
函数接口定义:
struct ListNode *createlist();
函数createlist利用scanf从输入中获取一系列正整数,当读到−1时表示输入结束。按输入数据的逆序建立一个链表,并返回链表头指针。链表节点结构定义如下:
struct ListNode {
int data;
struct ListNode *next;
};
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *createlist();
int main()
{
struct ListNode *p, *head = NULL;
head = createlist();
for ( p = head; p != NULL; p = p->next )
printf("%d ", p->data);
printf("\\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
1 2 3 4 5 6 7 -1
输出样例:
7 6 5 4 3 2 1
- 提交结果:
- 源码:
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode* next;
};
struct ListNode* createlist();
int main()
{
struct ListNode* p, * head = NULL;
head = createlist();
for (p = head; p != NULL; p = p->next)
printf("%d ", p->data);
printf("\\n");
return 0;
}
/* 你的代码将被嵌在这里 */
struct ListNode* createlist()
{
struct ListNode* tail, * temp; // 头节点、尾节点、临时节点
// 为尾节点分配空间
tail = (struct ListNode*)malloc(sizeof(struct ListNode));
// 尾节点指向空
tail->next = NULL;
int num;
scanf("%d", &num);
// 如果输入的第一个数据不是-1,则将其存入尾节点,否则返回空
if (num != -1)
{
tail->data = num;
}
else
{
return NULL;
}
scanf("%d", &num);
// 继续输入数据,不为-1就将其插入到尾节点之前
while (num != -1)
{
// 为临时节点分配内存
temp = (struct ListNode*)malloc(sizeof(struct ListNode));
// 数据域存储消息
temp->data = num;
// 将临时节点插入到尾节点前
temp->next = tail;
// 更新尾节点为临时节点
tail = temp;
scanf("%d", &num);
}
return tail;
}
以上是关于[PTA]实验11-2-3 逆序数据建立链表的主要内容,如果未能解决你的问题,请参考以下文章