定义单向链表:输入若干个正整数(输入-1为结束标志),要求按输入数据的逆序并输出。 输入输出示例:括号内为说明
时间: 2023-05-02 19:03:49 浏览: 125
题目要求输入一个若干个正整数的单向链表,然后按输入数据的相反顺序输出。输入输出示例:括号内为说明
输入:
3->2->1(链表)
输出:
1->2->3(链表)
其中,箭头“->”表示链表中的指针关系。
相关问题
用C语言编写:输入若干个正整数(输入-1 为结束标志),按输入的逆序建立一个单向链表,并输出链表。
好的,以下是用 C 语言编写的程序,实现您的要求:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int val;
struct Node* next;
};
int main() {
struct Node* head = NULL;
// 循环读入并建立链表
int num;
printf("请输入若干个正整数,以-1作为结束标志:\n");
scanf("%d", &num);
while (num != -1) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->val = num;
newNode->next = head;
head = newNode;
scanf("%d", &num);
}
// 遍历链表,输出结果
printf("链表的逆序为:\n");
struct Node* p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
// 释放链表结点的内存
p = head;
while (p != NULL) {
struct Node* tmp = p;
p = p->next;
free(tmp);
}
head = NULL;
return 0;
}
```
上述程序中,我们同样定义了一个结构体 `Node`,表示链表中的一个结点。然后定义了链表的头指针 `head`,用来动态地建立链表。程序通过循环读入若干个正整数,每读入一个数就创建一个新的结点,并将其插入链表的头部,实现逆序建立链表。最后,程序遍历链表,输出链表的逆序。
注意,在程序最后,我们同样需要释放链表结点的内存,避免内存泄漏。这里采用了一个简单的方法,即遍历链表,逐个删除每个结点。需要注意的是,C语言中需要使用 `malloc()` 函数动态分配内存,使用 `free()` 函数释放内存。
题目内容:输入若干个正整数(输入-1为结束标志),要求按输入数据的逆序建立单链表并输出。
可以按照以下步骤实现:
1. 定义一个结构体表示单链表的节点,包含一个整数值和一个指向下一个节点的指针。
2. 读入输入的正整数,每读入一个数就创建一个新的节点,并将其插入链表的头部。
3. 当读入-1时,停止读入。此时链表已经建立完成。
4. 遍历链表,按顺序输出每个节点的值。
下面是完整的 C++ 代码示例:
```cpp
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
int main() {
ListNode* head = NULL;
int num;
while (true) {
cin >> num;
if (num == -1) break;
ListNode* node = new ListNode(num);
node->next = head;
head = node;
}
ListNode* cur = head;
while (cur != NULL) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
return 0;
}
```
在这个代码中,我们定义了一个链表的头指针 head,初始为 NULL。每次读入一个数字时,我们创建一个新的节点 node,并将其插入到链表头部。具体来说,我们先将 node 的 next 指针指向 head,然后令 head 指向 node。这样就可以保证新插入的节点永远在链表的前面,最终构建出的链表就是按照输入数据的逆序建立的。
最后,我们遍历整个链表,输出每个节点的值。注意,由于题目要求在每个数字后面输出一个空格,因此需要在每次输出后添加 " "。最后再输出一个换行符,表示整个输出操作结束。