•有一个递增有序单链表L,设计一个算法,向该单链表中 插入一个元素为x的结点,使得插入后该链表仍然有序。
时间: 2023-05-23 13:02:08 浏览: 82
已知单链表L为按值递增有序的,编写算法将数据元素e插入到顺序表L中,使之仍有序
5星 · 资源好评率100%
答案:
可以利用指针遍历单链表,找到第一个大于等于x的元素,然后在该元素之前插入新结点。具体实现可以参考以下代码:
```c
void insert(Node *&head, int x) {
Node *newNode = new Node(x);
if (head == nullptr || head->val >= x) {
newNode->next = head;
head = newNode;
return;
}
Node *prev = head;
Node *curr = head->next;
while (curr != nullptr && curr->val < x) {
prev = curr;
curr = curr->next;
}
newNode->next = curr;
prev->next = newNode;
}
```
其中,Node 是单链表的结点类型,val 表示结点的值,next 表示指向下一个结点的指针。head 表示单链表的头指针,指向第一个结点或者 nullptr(空链表)。
上述代码中,如果单链表为空或者第一个结点的值大于等于 x,直接在头部插入新结点。否则,利用两个指针(prev 和 curr)遍历单链表,找到第一个大于等于 x 的元素,然后在该元素之前插入新结点。注意要使用指向指针的引用,以便在插入新结点时修改头指针。
阅读全文