输入一系列自然数(0和正整数),输入-1时表示输入结束。按照输入的顺序,用头插法建立单链表,并遍历所建立的单链表,输出这些数据。注意 -1 不加入链表。
时间: 2023-05-31 19:18:34 浏览: 481
头插法创建单链表并输出.cpp
### 回答1:
好的,以下是用中文回复:
1. 首先,我们需要定义一个链表节点的结构体,包含一个整型数据域和一个指向下一个节点的指针域。
2. 然后,我们需要定义一个头指针,用来指向链表的头节点。
3. 接下来,我们可以使用一个循环来不断读入自然数,直到读入-1为止。每读入一个自然数,就新建一个节点,并将该节点插入到链表的头部。
4. 最后,我们可以再次遍历链表,输出其中的所有数据。
具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
int main() {
Node* head = NULL; // 头指针初始化为NULL
// 循环读入自然数,直到读入-1为止
int num;
while (1) {
scanf("%d", &num);
if (num == -1) {
break;
}
// 新建节点并插入到链表头部
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = num;
new_node->next = head;
head = new_node;
}
// 遍历链表并输出数据
Node* p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
return ;
}
```
### 回答2:
题目中要求我们用头插法建立单链表,所谓头插法,就是每次插入新的元素时都插入到链表头部,然后新加入的元素成为新的链表头。因此我们需要先建立一个头节点,作为链表的起点。然后,每输入一个自然数,就新建一个节点,将其插入头节点之后,再将其作为新的头节点。当输入-1时,表示输入已经结束,我们遍历一遍这个链表,输出其中不包括头节点的每个节点的自然数。
下面就是一种可能的实现方式:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
head = ListNode() # 新建一个头节点,val默认为0,next默认为None
while True:
num = int(input("请输入自然数:"))
if num == -1:
break
new_node = ListNode(num) # 新建一个节点,val为输入的自然数
new_node.next = head.next # 将新节点的next指向头节点的下一个节点
head.next = new_node # 将头节点的next指向新建的节点
node = head.next # 从头节点的下一个节点开始遍历
while node:
print(node.val, end=" ")
node = node.next
```
输入一些自然数,测试一下这个程序吧。
### 回答3:
输入一系列自然数,可以利用while循环读入,并对每一个读入的数进行判断,若是-1,则跳出循环停止读入。在读入的同时,可以利用头插法建立单链表。头插法即将新建节点插入到链表头部,使新节点成为链表的第一个节点。具体实现如下:
struct Node{
int data; // 数据域
Node* next; // 指针域
};
Node* head = NULL; // 链表头指针
while(1){
int num;
cin >> num;
if(num == -1){ // 判断输入是否结束
break;
}
Node* p = new Node(); // 初始化新节点
p->data = num;
p->next = head; // 新节点指向头节点
head = p; // 头节点指向新节点
}
输出链表中的数据,可以利用while循环遍历节点,并输出每个节点中存储的数值,在输出完链表中所有数据后,记得释放链表中所有节点的内存空间,避免内存泄漏。输出示例为:
Node* p = head; // 遍历节点指针
while(p != NULL){
cout << p->data << " ";
p = p->next;
}
// 释放链表内存空间
Node* temp = head;
while(temp != NULL){
head = head->next;
delete temp;
temp = head;
}
完整代码如下:
#include <iostream>
using namespace std;
struct Node{
int data; // 数据域
Node* next; // 指针域
};
Node* head = NULL; // 链表头指针
int main(){
// 输入自然数,建立链表
while(1){
int num;
cin >> num;
if(num == -1){ // 判断输入是否结束
break;
}
Node* p = new Node(); // 初始化新节点
p->data = num;
p->next = head; // 新节点指向头节点
head = p; // 头节点指向新节点
}
// 输出链表中的自然数
Node* p = head; // 遍历节点指针
while(p != NULL){
cout << p->data << " ";
p = p->next;
}
cout << endl;
// 释放链表内存空间
Node* temp = head;
while(temp != NULL){
head = head->next;
delete temp;
temp = head;
}
return 0;
}
阅读全文