请根据以下要求写出代码:本题要求实现单链表的头插法和尾插法建表。 要求写出CreateListF函数、 CreateListR函数和DispList函数。 说明:单链表带头结点。
时间: 2024-03-30 11:14:14 浏览: 63
单链表(头插法,尾插法)
好的,我理解了你的要求,请看以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 单链表结点定义
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建结点并返回结点指针
Node* createNode(int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
return node;
}
// 头插法建表,返回链表头指针
Node* createListF() {
Node* head = createNode(0); // 创建头结点
int data;
printf("请输入数据(输入-1终止输入): ");
scanf("%d", &data);
while (data != -1) {
Node* node = createNode(data);
node->next = head->next;
head->next = node;
printf("请输入数据(输入-1终止输入): ");
scanf("%d", &data);
}
return head;
}
// 尾插法建表,返回链表头指针
Node* createListR() {
Node* head = createNode(0); // 创建头结点
Node* tail = head; // 尾结点指针
int data;
printf("请输入数据(输入-1终止输入): ");
scanf("%d", &data);
while (data != -1) {
Node* node = createNode(data);
tail->next = node;
tail = node;
printf("请输入数据(输入-1终止输入): ");
scanf("%d", &data);
}
return head;
}
// 遍历链表并输出每个结点的数据元素(从头结点的下一个结点开始)
void dispList(Node* head) {
Node* node = head->next;
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
Node* head;
head = createListF();
printf("头插法建表后的链表:\n");
dispList(head);
head = createListR();
printf("尾插法建表后的链表:\n");
dispList(head);
return 0;
}
```
使用时直接运行,输入数据即可。
阅读全文