c语言通过键盘输入整数构建初始化单链表,实现该链表的原地逆制
时间: 2024-09-13 15:11:01 浏览: 56
在 C 语言中,你可以通过动态内存分配创建一个单链表,并利用用户输入的数据逆序它。这里是一个简单的步骤来实现这个功能:
1. 定义结构体 `Node` 表示链表节点,包含一个整数值 `data` 和指向下一个节点的指针 `next`。
2. 创建一个函数 `input_list()` 用于获取用户输入并初始化链表。
3. 创建另一个函数 `reverse_list()` 实现链表的原地逆置。
首先,定义 `Node` 结构体:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
然后,实现 `input_list()` 函数:
```c
void input_list(Node** head) {
int num;
printf("请输入整数,直到输入0停止:\n");
*head = NULL;
while (scanf("%d", &num) == 1 && num != 0) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = num;
newNode->next = *head;
*head = newNode;
}
}
```
接下来,编写 `reverse_list()` 函数,通过修改节点的 `next` 指针实现链表逆置:
```c
void reverse_list(Node** head) {
if (*head == NULL || (*head)->next == NULL) {
return;
}
Node* prev = NULL;
Node* curr = *head;
while (curr != NULL) {
Node* temp = curr->next; // 保存下一个节点
curr->next = prev; // 更新当前节点的 next 指向 prev
prev = curr; // 移动 prev 到当前节点
curr = temp; // 移动 curr 到下一个节点
}
*head = prev; // 新的头节点就是原链表的尾节点
}
```
最后,在主程序中调用这两个函数:
```c
int main() {
Node* head = NULL;
input_list(&head);
reverse_list(&head);
// 打印逆序后的链表
print_list(head);
return 0;
}
// 辅助函数:打印链表
void print_list(Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
```
阅读全文