c语言链表的随机插入代码
时间: 2023-10-17 13:04:13 浏览: 39
以下是一个示例代码,实现了在链表中随机插入元素的功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 在链表中随机插入元素
void insert(Node** head, int value) {
// 创建新节点
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = value;
new_node->next = NULL;
// 获取链表长度
int len = 0;
Node* p = *head;
while (p != NULL) {
len++;
p = p->next;
}
// 随机选择插入位置
int pos = rand() % (len + 1);
// 插入新节点
if (pos == 0) {
new_node->next = *head;
*head = new_node;
} else {
p = *head;
for (int i = 1; i < pos; i++) {
p = p->next;
}
new_node->next = p->next;
p->next = new_node;
}
}
// 打印链表
void print_list(Node* head) {
Node* p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
srand(time(NULL)); // 初始化随机数生成器
Node* head = NULL; // 初始化链表为空
// 在链表中随机插入元素
for (int i = 0; i < 10; i++) {
int value = rand() % 100;
insert(&head, value);
print_list(head);
}
return 0;
}
```
在这个示例代码中,我们定义了一个链表节点结构体 `Node`,包含了一个整型数据 `data` 和一个指向下一个节点的指针 `next`。然后,我们定义了一个 `insert` 函数,用于在链表中随机插入元素。该函数首先创建一个新节点,然后遍历链表获取链表长度,接着随机选择插入位置,最后插入新节点到链表中。我们还实现了一个 `print_list` 函数,用于打印链表中所有元素。
在 `main` 函数中,我们首先初始化了随机数生成器,然后初始化了链表为空。接下来,我们使用 `insert` 函数在链表中随机插入了 10 个元素,并在每次插入后打印了链表。注意,在调用 `insert` 函数时,需要传入链表头节点的地址,因为我们需要改变链表头节点的指向。