/*
* if list_a and list_b has cross point return the addrss of cross-point.
* else return NULL
*/
static List *has_cross(List *list_a, List *list_b)
{
List *pa;
List *pb;
int len_a, len_b;
int i;
len_a = len_b = 0;
pa = list_a; /* 遍历链表a,并记录下此链表的长度 */
while (pa->next != NULL) {
pa = pa->next;
len_a++;
}
pb = list_b; /* 遍历链表b,并记录下链表b的长度 */
while (pb->next != NULL) {
pb = pb->next;
len_b++;
}
if (pa != pb) /* 如果指针pa,pb最后不相等,则两链表没有焦点 */
return NULL;
/* 较长的链表先向后调整到第N个元素(N = max(len_a, len_b) - min(len_a, len_b))
然后两链表同步向后调整,同时比较地址是否相等,如果相等则为首焦点。*/
pa = list_a;
pb = list_b;
if (len_a > len_b) {
for (i = len_a - len_b; i; i--)
pa = pa->next;
} else {
for (i = len_b - len_a; i; i--)
pb = pb->next;
}
while (pa != pb) {
pa = pa->next;
pb = pb->next;
}
return pa;
}
分享到:
相关推荐
但在一个大的系统中,如果出现两个链表相 交的情况,而且释放了其中一个链表的所有节点,那样就会造成信息的丢失,并且另一个与 之相交的链表也会受到影响,这是我们不希望看到的。在特殊的情况下,的确需要出现相交...
给出两个单向链表的头指针(如图3-8 所示),比如h1、h2,判断这两个链表是否 相交。这里为了简化问题,我们假设两个链表均不带环。
(1)建立两个链表A和B 链表元素个数分别为m和n个 (2)假设元素分别为 x1 x2 …xm 和 y1 y2 …yn 把它们合并成一个线性表C 使得: 当m> n时 C x1 y1 x2 y2 …xn yn … xm 当n>m时 C y1 x1 y2 x2 …ym xm ...
实现两个链表类的链接,实现加法“+”对链表的实现
输入两个链表并取其交集于其中之一链表中输出
1.3.9 如何判断两个链表是否相交
实现两个链表的合并(数据结构课程设计c语言版)
将两个有序的链表合并为一个有序链表,链表的大小是可变的
何将两个有序链表并为一个有序链表。
对于两个链表的归并,自己想了好久才做出来的,希望对初学的人有点帮助吧
该文件里面有用C语言实现两个链表之间的连接。
数据结构_两个链表的合并,一元多项式相加
3、将两个从小到大排列的链表合并为一个新链表(仍然有序排列),输出合并前的两个链表,输出合并后的链表,检查合并是否成功。
C++实现两个链表组合,不重新开创链表
设ha和hb分别是指向两个带头结点的非递减...要求设计一个算法,将这两个有序链表合并成一个非递增(递减)有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其它存储空间。表中允许有重复的数据。
给定两个链表AB,根据AB链表元素数目的不同,使用交叉排列得到链表C,之后对链表C进行升序排列得到链表D
两个有序链表序列的合并,已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。
从键盘输入两个链表,通过程序对他们排序,之后按递增顺序合并链表
已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列