算法实现:
void Insert(Node* first, int x) {
Node *s = NULL, *p=NULL;
s = (Node*)malloc(sizeof(Node));
s->data = x;
p = first;
while(p->next && p->next->data<x) p = p->next;
s->next = p->next;
p->next = s;
}
算法分析:
1.初始化:
Node *s = NULL, *p = NULL;//声明两个指针变量 s 和 p,用于创建新节点和遍历链表。
s = (Node*)malloc(sizeof(Node));//为新节点分配内存空间。
s->data = x;//将新节点的数据设置为要插入的值 x。
2.找到插入位置:
p = first;//将 p 指针指向链表的头节点。
while(p->next && p->next->data < x) p = p->next;//这个循环用于找到新节点应该插入的位置。只要 p 的下一个节点存在且下一个节点的数据小于 x,就继续移动 p 指针。当循环结束时,p 指向的节点就是新节点应该插入的位置之前的那个节点。
3.插入新节点:
s->next = p->next;//将新节点的 next 指针指向 p 的下一个节点。
p->next = s;//将 p 的 next 指针指向新节点,完成插入操作。