类似本题叙述的其它题解答如下
()[题目分析]本题将线性表la和lb连接要求时间复杂度为O()且占用辅助空间尽量小应该使用只设尾指针的单循环链表
LinkedList Union(LinkedList lalb)∥la和lb是两个无头结点的循环单链表的尾指针本算法将lb接在la后成为一个单循环链表
{ q=la>next;∥q指向la的第一个元素结点
la>next=lb>next;∥将lb的最后元素结点接到lb的第一元素
lb>next=q;∥将lb指向la的第一元素结点实现了lb接在la后
return(lb);∥返回结果单循环链表的尾指针lb
}∥算法结束
[算法讨论]若循环单链表带有头结点则相应算法片段如下
q=lb>next;∥q指向lb的头结点;
lb>next=la>next;∥lb的后继结点为la的头结点
la>next=q>next;∥la的后继结点为lb的第一元素结点
free(q);∥释放lb的头结点
return(lb);∥返回结果单循环链表的尾指针lb
()[题目分析]本题要求将单向链表ha和单向循环链表hb合并成一个单向链表要求算法所需时间与链表长度无关只有使用带尾指针的循环单链表这样最容易找到链表的首尾结点将该结点序列插入到单向链表第一元素之前即可
其核心算法片段如下(设两链表均有头结点)
q=hb>next;∥单向循环链表的表头指针
hb>next=ha>next;∥将循环单链表最后元素结点接在ha第一元素前
ha>next=q>next;∥将指向原单链表第一元素的指针指向循环单链表第一结点
free(q);∥释放循环链表头结点
若两链表均不带头结点则算法片段如下
q=hb>next;∥q指向hb首元结点
hb>next=ha;∥hb尾结点的后继是ha第一元素结点
ha=q;∥头指针指向hb的首元结点
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []