1.建立一个单链表,随机产生10个100以内的整数,并按要求完成:(1)在屏幕上显示单链表中的10个整数;(2)删除值为a的结点,若不存在a,则把a插入到第i个位置,显示更新后的单链表;
时间: 2024-02-21 09:00:08 浏览: 137
好的,我来解答你的问题。
以下是基于C语言的单链表代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//定义链表节点
typedef struct Node {
int data;
struct Node* next;
} Node;
//生成随机数
int randNum(int min, int max) {
return rand() % (max - min + 1) + min;
}
//创建链表
Node* createList() {
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
Node* p = head;
//生成10个随机数并插入链表
for (int i = 0; i < 10; i++) {
Node* temp = (Node*)malloc(sizeof(Node));
temp->data = randNum(1, 100);
temp->next = NULL;
p->next = temp;
p = p->next;
}
return head;
}
//打印链表
void printList(Node* head) {
Node* p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//删除结点
void deleteNode(Node* head, int a) {
Node* p = head->next;
Node* pre = head;
while (p) {
if (p->data == a) {
pre->next = p->next;
free(p);
return;
}
pre = p;
p = p->next;
}
//如果不存在值为a的结点,则把a插入到第i个位置
printf("不存在值为%d的结点,将其插入到第%d个位置\n", a, 5);
Node* temp = (Node*)malloc(sizeof(Node));
temp->data = a;
temp->next = pre->next;
pre->next = temp;
}
int main() {
srand((unsigned int)time(NULL));
Node* head = createList();
printf("原始链表:");
printList(head);
deleteNode(head, 50);
printf("删除值为50后的链表:");
printList(head);
return 0;
}
```
在这个代码中,我们首先定义了一个节点结构体,包含了数据和指向下一个节点的指针。然后我们通过`createList()`函数随机生成了10个100以内的整数,并将它们插入到链表中。
接着,我们使用`printList()`函数打印了链表中的所有节点。
然后,我们使用`deleteNode()`函数,删除了值为a的节点。具体实现是,遍历链表,找到值为a的节点,将其从链表中删除。如果不存在值为a的节点,我们就将a插入到第i个位置,这里我们默认插入到第5个位置。
最后,我们再次调用`printList()`函数,打印删除或插入后的链表。
希望这个代码能够帮到你!
阅读全文