C语言编程实现以下功能:1、通过键盘输入表中元素值,利用尾插法建单链表,并返回该单链表头指针L :2、将链表L中的元素就地逆置。
时间: 2024-12-06 16:21:22 浏览: 30
在C语言中,我们可以分两步来实现这个功能:
1. **尾插法建立单链表**:
首先,我们需要定义一个链表节点结构体`struct Node`,包含数据域和指向下一个节点的指针。然后,我们创建一个函数`insertTail()`来插入新元素到链表的末尾。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 尾插法插入元素
Node* insertTail(Node* L, int value) {
if (L == NULL) { // 如果链表为空,直接创建新节点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
return newNode;
} else {
// 否则遍历到最后一个节点并插入
Node* temp = L;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = (Node*)malloc(sizeof(Node)); // 分配空间
temp->next->data = value;
temp->next->next = NULL; // 设置新节点的下一个指针为NULL
return L; // 返回链表头指针
}
}
// 获取用户输入并构建链表
int main() {
Node* L = NULL; // 初始化链表头指针
int value;
printf("请输入链表元素,输入0结束:\n");
while ((value = getchar()) != '0') { // 注意这里getchar()处理换行符
L = insertTail(L, value);
}
// 至此,链表L已按用户输入构建完成
// ... (继续下面操作)
}
```
2. **链表元素就地逆置**:
我们可以创建一个新的函数`reverseList()`,采用迭代或递归的方式对链表进行反转。
```c
// 就地逆置链表(迭代)
void reverseList(Node** L) {
Node *prev = NULL, *current = *L, *nextTemp;
while (current != NULL) {
nextTemp = current->next;
current->next = prev;
prev = current;
current = nextTemp;
}
*L = prev; // 更新链表头指针
}
// 反转链表并打印结果
void printList(Node* L) {
Node* temp = L;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
// 调用逆置函数
reverseList(&L);
// 打印逆置后的链表
printList(L);
return 0;
}
```
阅读全文