用C语言实现创建链表的同时,用rand函数取余M得到的值来作为链表得值,但链表的值不能重复,所以每次使用rand函数后要遍历前面的链表,比较他们是否相等
时间: 2023-07-10 10:09:54 浏览: 74
下面是一个简单的示例代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 100 // 取余的值
// 链表结构体
typedef struct Node {
int val; // 值
struct Node *next; // 指向下一个节点的指针
} Node;
// 创建新节点
Node* createNode(int val) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->val = val;
newNode->next = NULL;
return newNode;
}
// 插入新节点到链表尾部
void insertNode(Node **head, int val) {
Node *newNode = createNode(val);
if (*head == NULL) {
*head = newNode;
} else {
Node *cur = *head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = newNode;
}
}
// 遍历链表,判断值是否已存在
int isExist(Node *head, int val) {
Node *cur = head;
while (cur != NULL) {
if (cur->val == val) {
return 1;
}
cur = cur->next;
}
return 0;
}
// 创建链表
Node* createList(int n) {
Node *head = NULL;
srand((unsigned int)time(NULL)); // 设置随机数种子
while (n-- > 0) {
int val;
do {
val = rand() % M; // 生成随机数并取余
} while (isExist(head, val)); // 如果已存在则重新生成
insertNode(&head, val); // 插入新节点
}
return head;
}
// 打印链表
void printList(Node *head) {
Node *cur = head;
while (cur != NULL) {
printf("%d ", cur->val);
cur = cur->next;
}
printf("\n");
}
int main() {
int n = 10; // 链表长度
Node *head = createList(n);
printList(head);
return 0;
}
```
在上面的示例代码中,`createList` 函数用于创建长度为 n 的链表,其中每个节点的值通过 rand 函数生成并取余 M,如果该值已经在链表中存在,则重新生成。`isExist` 函数用于遍历链表,判断值是否已存在。`insertNode` 函数用于将新节点插入到链表尾部。`printList` 函数用于遍历链表并打印节点的值。
阅读全文