C语言:设单链表L是一个递减有序表,试写一算法将X插入其中仍保持L的有序性
时间: 2024-02-25 16:56:26 浏览: 72
以下是C语言实现的算法:
```c
void insertNode(struct ListNode **head, int x) {
struct ListNode *newNode = (struct ListNode *)malloc(sizeof(struct ListNode));
newNode->val = x;
newNode->next = NULL;
struct ListNode *prev = NULL;
struct ListNode *curr = *head;
while (curr != NULL && curr->val > x) {
prev = curr;
curr = curr->next;
}
if (prev == NULL) { // x应插入到头部
newNode->next = *head;
*head = newNode;
} else { // x应插入到prev和curr之间
prev->next = newNode;
newNode->next = curr;
}
}
```
解释:
- `struct ListNode` 是单链表结点的结构体定义。
- `insertNode` 函数接受一个指向单链表头结点的指针和待插入的整数 x。
- 首先创建一个新的结点 `newNode`,保存 x,将它的下一个结点设为 NULL。
- 接着遍历链表,找到第一个小于等于 x 的结点 curr 和它的前一个结点 prev。
- 如果 prev 为 NULL,说明 x 应该插入到头部,将新结点的下一个结点设为原头结点,然后将头结点指向新结点。
- 否则,将新结点插入到 prev 和 curr 之间。
这样,就可以将 x 插入到 L 中,并保持 L 的递减有序性。
阅读全文