用c语言创建一个单链表,除头结点之外有7个有效结点,存放数字分别为:32,28,45,67,14,18,29,建表过程要求使用头插法。要求:在67与14之间插入结点,插入结点存放数字为100,将插入前和插入后的各结点数字输出
时间: 2024-12-18 12:35:55 浏览: 9
在C语言中,我们可以使用结构体定义链表节点,并通过头插法的方式创建和插入新节点。首先,我们定义链表节点结构:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
然后,我们可以按照描述创建链表并插入元素。这里是一个示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 创建新的链表节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 插入节点到链表
void insertNode(Node** headRef, int data, int position) {
// 如果链表为空或插入位置小于0
if (*headRef == NULL || position <= 0) {
printf("Invalid insertion.\n");
return;
}
// 新节点
Node* newNode = createNode(data);
// 如果需要插入的位置是第一个节点
if (position == 1) {
newNode->next = *headRef;
*headRef = newNode;
return;
}
Node* current = *headRef;
for (int i = 1; i < position - 1; ++i) {
if (current->next != NULL) {
current = current->next;
} else {
printf("Position out of range.\n");
return;
}
}
newNode->next = current->next;
current->next = newNode;
}
// 打印链表
void printList(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
Node* head = NULL;
// 初始化链表,头插法添加32, 28, 45, 67, 14, 18, 29
for (int i = 6; i >= 0; --i) {
head = insertNode(&head, 32 + i, i + 1); // 假设初始头节点是32
}
// 在67和14之间插入100
insertNode(&head, 100, 4);
// 输出插入前和插入后的链表
printf("Original list before insertion:\n");
printList(head);
printf("\nList after inserting 100 between 67 and 14:\n");
printList(head);
return 0;
}
```
运行这个程序后,你会看到原始链表的内容以及插入100之后的新链表内容。
阅读全文