问题
已知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据节点个数。要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。
分析
最快的速度,遍历长度较短的链表,找到尾结点,然后将该链表插入到长度较长的链表中,即可。
代码
LinkList mergeList(LinkList &l1, int m, LinkList &l2, int n){if(m > n) {///l1的长度大于l2 将l2插入到l1中LNode *p = l2 -> next;while(p -> next != l2) {///注意这个条件p = p -> next;}p -> next = l1 -> next;l1 -> next = l2 -> next;free(l2);return l1;}else {///将l1插入到l2中LNode *p = l1 -> next;while(p ->next != l1) {p = p -> next;}p -> next = l2 -> next;l2 -> next = l1 -> next;free(l1);return l2;}
}
源代码
http://123.206.59.223:8080/code/code/16.rar