怎么给网站做推广,湛江网站推广优化,装潢设计师要学多久,建站工具有哪些cms从键盘输入任意多个正整数#xff0c;输入以-1结束。逆序输出这些整数(不包括-1)。 提示#xff1a; 1、逆序创建单链表。结点数据域是整型数。每输入一个整数#xff0c;向链表中插入一个结点。当输入-1时结束链表的创建。 2、遍历链表#xff0c;输出结点数据域的值。 3、…从键盘输入任意多个正整数输入以-1结束。逆序输出这些整数(不包括-1)。 提示 1、逆序创建单链表。结点数据域是整型数。每输入一个整数向链表中插入一个结点。当输入-1时结束链表的创建。 2、遍历链表输出结点数据域的值。 3、遍历完成后要求销毁该链表。
输入格式:
任意多的正整数输入序列以-1结束。
输出格式:
逆序输出这些整数不包括-1。
输入样例:
在这里给出一组输入。例如
3 8 2 9 7 4 -1输出样例:
在这里给出相应的输出。例如
4 7 9 2 8 3 代码长度限制
16 KB
时间限制
500 ms
内存限制
64 MB
栈限制
8192 KB
解题思路如下
首先需要明确题目要求的功能是创建一个链表然后允许用户输入一系列的数字并将这些数字作为链表元素依次添加到链表的头部且每次添加后链表都应该是反转的。最后要能够显示链表的内容并在结束时销毁链表。
解题步骤如下
定义链表结构 使用typedef定义链表节点的数据类型Node包括一个数据域Data和一个指向下一个节点的指针域Next。同时定义指向Node的指针类型List便于后续操作。创建空链表 实现Makeempty函数用于创建一个只有一个头节点的空链表。头节点不包含数据只用来简化链表操作。添加元素并反转链表 实现ReversLinkList函数该函数接收链表头节点和一个新元素。在函数内部为新元素创建一个新节点并将其插入到链表的头部。由于每次插入都是在头部所以每次插入都会导致链表反转。显示链表内容 实现DisplayLinkList函数遍历链表从头节点后的第一个节点开始打印每个节点的数据。销毁链表 实现DestroyLinkList函数遍历链表逐个释放每个节点所占用的内存空间。注意需要从头节点的下一个节点开始释放最后释放头节点本身。主函数流程 在main函数中首先调用Makeempty创建一个空链表。进入一个无限循环不断读取用户输入的数字直到输入-1为止。对于每个输入的数字调用ReversLinkList将其添加到链表头部并反转链表。调用DisplayLinkList显示当前链表的内容。最后调用DestroyLinkList销毁链表释放内存。
具体代码如下
#includestdio.h
#includestdlib.h // 定义链表元素的类型为整型
typedef int ELemtype; // 定义链表节点结构体
typedef struct Node { ELemtype Data; // 节点数据 struct Node* Next; // 指向下一个节点的指针
}Node,*List; // 创建一个空的链表
List Makeempty(); // 反转链表并添加新元素X到链表头部
void ReversLinkList(List L, ELemtype X); // 显示链表的内容
void DisplayLinkList(List L); // 销毁链表释放其占用的内存
void DestroyLinkList(List L); int main() { ELemtype n; List L; // 创建一个空的链表 L Makeempty(); // 不断读取用户输入直到输入-1为止 while (1) { scanf(%d, n); if (n -1) { break; } else { // 将新元素添加到链表头部并反转链表 ReversLinkList(L, n); } } // 显示链表的内容 DisplayLinkList(L); printf(\n); // 销毁链表 DestroyLinkList(L);
} // 创建一个空的链表并返回其头节点
List Makeempty() { List newNode (List)malloc(sizeof(struct Node)); if (newNode NULL) { exit(EXIT_FAILURE); // 内存分配失败退出程序 } newNode-Next NULL; // 初始时链表为空 return newNode;
} // 反转链表并添加新元素X到链表头部
void ReversLinkList(List L, ELemtype X) { List list; // 创建一个新的节点其数据为X list Makeempty(); list-Data X; // 将新节点插入到原链表的头部并反转链表 list-Next L-Next; L-Next list;
} // 显示链表的内容
void DisplayLinkList(List L) { // 跳过头节点从头节点的下一个节点开始显示 L L-Next; while (L ! NULL) { printf(%d , L-Data); // 显示节点数据 L L-Next; // 移动到下一个节点 }
} // 销毁链表释放其占用的内存
void DestroyLinkList(List L) { List p, q; p L; q p-Next; // 从链表的第二个节点开始逐个释放节点 while (q ! NULL) { free(p); p q; q q-Next; } // 释放头节点 free(p);
}