题比较简单,单向链表有交点意思就是交点后的节点都是一样的了
NODE* FindNode(NODE* pHead1, NODE* pHead2) { NODE* p1 = pHead1; NODE* p2 = pHead2; int i = 1, j = 1, k = 0, f = 0;
if(pHead1 == NULL || pHead2 == NULL) { return NULL; }
while(p1->next != NULL) { p1 = p1->next; i++; }
while(p2->next != NULL) { p2 = p2->next; j++; }
if(p1 != p2) { return NULL; } else { p1 = pHead1; // 1 p2 = pHead2;
f = fabs(i-j) //求绝对值的函数 if(i > j) // 2 { for(k=0; k<f; k++) { p1 = p1->next; } while(p1 != p2) { p1 = p1->next; p2 = p2->next; } return p1; } else { for(k=0; k<f; k++) { p2 = p2->next; } while(p1 != p2) { p1 = p1->next; p2 = p2->next; } return p1; } } }
|
1,在第一次遍历完链表后,进行第二次遍历,需要把指针再次初始化;看见网上一些人给的例子没有再次初始化显然是错误的;再调用NULL的next不死才怪!
2,小优化。循环和判断,把判断放在外面;如果把i和j大小判断放在里面的话就意味着循环多少次,判断就执行多少次;当然这样做的唯一不足就是代码多了点;还有for循环之前的对f的赋值,有的为了简便直接放在for语句里面,不过同样道理,放在for循环里面,就执行了n次的fabs;拿出来赋值,只赋值一次就OK。
分享到:
相关推荐
给出两个单向链表的头指针(如图3-8 所示),比如h1、h2,判断这两个链表是否 相交。这里为了简化问题,我们假设两个链表均不带环。
分析与解法 这样的一个问题,也许我们平时很少考虑。但在一个大的系统中,如果出现两个链表相 交的情况,而且释放了其中一个链表的...的两个链表,我们希望在释放一个链表之前知道是否有其他链表跟当前这个链表相交。
C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表
将一个单向链表反向连接
C#单向链表的实现的源码
04.单向链表以及单向链表的应用.ppt
单向链表架构代码,适合学习链表的学生学习!内附排序函数,打印函数,链表尾添项函数,删除函数。
1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2.遍历单向链表。 3.把单向链表中元素逆置(不允许申请新的结点空间)...利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。
c++实现单向链表逆转,c++实现单向链表逆转,c++实现单向链表逆转,c++实现单向链表逆转,c++实现单向链表逆转,
这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。
1.3.9 如何判断两个链表是否相交
这是在面试中很常见的一个例子,实现单向链表的逆转,这个例子是用递归法实现的,一个简单的单向链表的例子
可以看到如果把h1链表的尾节点的next指针指向h2链表的第一个节点,那么可以看到如果h1和h2相交,则h2变成了一个循环单链表,因此只需判断h2是否为循环链表
本文件描述单向链表类模板。移植时,仅需要本文件
培训班老师自己写的单向链表,代码非常全,也很好理解,可执行。
Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现...
java语言模拟单向链表,JAVA数据结构
单向链表实例
C 语言版 单向链表 #include #include typedef struct student { int num; struct student *next; }st; st *creat() //创建链表 { st *head , *tail , *p; int num = 0; head = tail = p = NULL; printf...