C语言实现有序链表中插入新的节点
节点结构
struct node
{
int data;
node *next;
};
插入函数(保持有序)
//链表中插入节点(保持链表升序关系)
node *insert(node *head, node *p) {//头节点 ,p指向要插入的节点
node *p1, *p2;
if (head == NULL) { //链表为空(head=NULL)
head = p;
p->next = NULL;
return head;
}
if (head->data >= p->data) { //链表非空,将结点插入到表头位置
p->next = head;
head = p;
return head;
}
p1 = head;
p2 = head;
while (p2->next && p2->data < p->data) {
p1 = p2;
p2 = p2->next;
}
if (p2->data < p->data) { //将结点插入到链表的末尾。
p2->next = p;
p->next = NULL;
} else { //将结点插入到链表的中间位置
p->next = p2;
p1->next = p;
}
return head;
}