新建两个带表头结点的非递减有序单链表。然后设计一个算法,将这两个有序链表合并成一个非递减有序的单链

2024-12-25 08:57:37
推荐回答(1个)
回答1:

合并后的链表位于headA链表中
void merge(Node &headA, Node headB)
{
Node *p = &headA;
Node *q = headB.next;
while(p->next != NULL && q != NULL)
{
if (p->next->data >= q->data)
{
headB.next = q->next; //将结点从headB中移出
q->next = p->next; //移出的结点插入到p之后
p->next = q;
p = p->next; //p指向移入的结点
q = headB.next; //q继续指向headB链表中的第一个结点
} else { //如果p的下一个结点的值比q的值小则p指针后移
p = p->next;
}
}
if (p->next == NULL) //若q中还有结点未移入headA中,则将后面的全部移入headA
{
p->next = q;
}
}