问题描述:已知递增有序的单链表A,编写算法实现向A中插入或删除一个元素,并保持A的有序性。 实验要求: 3、结点的数据均为整型。 4、若表中已经存在此元素,则不插入
时间: 2024-10-16 17:16:16 浏览: 29
要实现这个功能,你需要创建一个C语言程序,包含一个链表节点结构以及相应的插入和删除操作。这里我会提供一个简单的实现,包括`Node`结构、`insert`(插入)和`remove`(删除)函数。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 插入函数,如果链表中已有该值则跳过
void insert(Node** head, int value) {
if (*head == NULL || (*head)->data > value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = *head;
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL && current->next->data < value) {
current = current->next;
}
if (current->next != NULL && current->next->data == value) return; // 如果已存在,不插入
newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = current->next;
current->next = newNode;
}
}
// 删除函数
void remove(Node** head, int value) {
if (*head == NULL) return;
if (*head->data == value) {
Node* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
Node* current = *head;
while (current->next != NULL && current->next->data != value) {
current = current->next;
}
if (current->next != NULL) {
Node* temp = current->next;
current->next = current->next->next;
free(temp);
}
}
int main() {
// 初始化示例
Node* head = NULL;
insert(&head, 5); // 插入
insert(&head, 3); // 插入
insert(&head, 7); // 插入
printf("After insertion: ");
printList(head); // 假设有个printList函数用于打印链表
remove(&head, 5); // 删除
printf("\nAfter removing 5: ");
printList(head);
return 0;
}
```
在这个实现中:
- `insert`函数遍历链表找到合适的位置插入新节点,如果发现已有相同数据的节点则直接返回。
- `remove`函数从头开始查找指定值,找到后删除节点并更新指针。
阅读全文