合并两个有序链表,就需要对链表中所有的元素进行遍历,将链表plist2往链表plist1中插入,当链表plist1已经遍历完,链表plist2仍然不为NULL,将链表plist2的剩余部分插入plist1 中。插入过程如图所示:
代码实现:
Node* Combine(List plist1,List plist2)
{
Node*p = plist1; //被插入的链表
Node*q = plist2->next;//拆分插入的链表
Node *tmp; //临时存储
for(;q!=NULL&& p ->next != NULL ;)//q!=NULL还有需要插入的节点 p ->next != NULL被插入的链表的尾节点
{
if(q->data <= p->next->data)//当链表2中的数据小于或等于时,插入
{
tmp = q->next; //保存即将被修改的q->next;
q->next = p->next;
p->next = q;
p=q;
q=tmp;
}
else
{
p = p->next;//链表1,往后移
}
}
if(p->next == NULL && q !=NULL )//链表1的到了尾节点,链表2还没有遍历完成
{
p->next= q;//将尾节点指向链表2剩余的节点。
}
return plist1;
}