给定一个带头结点的非递增有序的单链表,请在表中插入一个新的整数下,保证该表仍然有序,请采用c语言描述算法,并分析算法的时间复杂度
时间: 2024-03-06 07:48:47 浏览: 73
3-2 试编写一个算法,在带表头结点的单链表中寻找第i个结点.doc
算法描述:
1. 创建一个新节点,将要插入的整数作为新节点的数据域。
2. 遍历链表,找到第一个比要插入的数小的节点的前一个节点p。
3. 将新节点插入到p节点之后。
时间复杂度:O(n)
算法分析:
在遍历链表的过程中,最坏情况是需要遍历整个链表,因此时间复杂度为O(n)。
C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
//定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
//创建新节点函数
Node* create_node(int data) {
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
//插入函数
void insert_node(Node* head, int data) {
Node* p = head;
while (p->next != NULL && p->next->data >= data) {
p = p->next;
}
Node* new_node = create_node(data);
new_node->next = p->next;
p->next = new_node;
}
//输出函数
void print_list(Node* head) {
Node* p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
}
int main() {
//创建头结点
Node* head = create_node(0);
//插入测试数据
insert_node(head, 5);
insert_node(head, 3);
insert_node(head, 6);
insert_node(head, 1);
insert_node(head, 2);
//输出结果
print_list(head);
return 0;
}
```
阅读全文