链表常见面试题四:解决链表相交问题
来源:互联网 发布:淘宝发布宝贝过程好慢 编辑:程序博客网 时间:2024/06/06 07:40
问题1:判断两链表是否相交
解题思路:
分别遍历两个链表,到达链表末尾时判断两链表的节点是否相同,相同则两链表相交,否则不想交
// 判断两个链表是否相交,假设两个链表都不带环。
int CheckCross(pList list1, pList list2){ pLinkNode l1 = list1; pLinkNode l2 = list2; if (l1 == NULL || l2 == NULL) { return 0; } while (l1->next) { l1 = l1->next; } //遍历l1链表至链表末尾 while (l2->next) { l2 = l2->next; }//遍历l2链表至链表末尾 if (l1 == l2) //判断两链表最后的一个节点是否相同,相同则相交返回1 { return 1; } else return 0;//不同则返回0}
问题2:若两个链表相交,求这两个链表的交点
解题思路:
分别遍历两个链表,记录两链表的长度len_l1和len_l2,让较长的链表的指针先走|len_l1 - len_l2|步,然后两个指针一起走,两指针相遇的节点就是两个链表的交点。
pLinkNode LinkCrossNode(pList list1, pList list2){ int len_l1=0; int len_l2 = 0; int len = 0; pLinkNode l1 = list1; pLinkNode l2 = list2; pLinkNode longlink = NULL; pLinkNode shortlink = NULL; while (l1) { len_l1++; l1 = l1->next; }//记录第一个链表长度 while (l2) { len_l2++; l2 = l2->next; }//记录第二个链表长度 if (len_l1 > len_l2) { len = len_l1 - len_l2; while (len--) { list1 = list1->next; }//较长链表先走len = |len_l1 - len_l2|步 } else { len = len_l2 - len_l1; while (len--) { list2 = list2->next; }//较长链表先走len = |len_l1 - len_l2|步 } while (list1!= list2)//两指针同时走,相遇点就是两个链表的交点 { list1 = list1->next; list2 = list2->next; } return list1;}
0 0
- 链表常见面试题四:解决链表相交问题
- 经典面试题:链表的相交与环问题
- 经典面试题:链表的相交与环问题
- 经典面试题:链表的相交与环问题
- 经典面试题:链表的相交与环问题
- 经典面试题:链表的相交与环问题
- 经典面试题:链表的相交与环问题
- 经典面试题:链表的相交与环问题
- 经典面试题:链表的相交与环问题
- 面试题---判断链表是否相交
- 面试题---判断链表是否相交
- 链表常见面试题三:解决链表带环问题
- 链表常见面试题
- 链表常见面试题
- 链表常见面试题
- 链表常见面试题
- 程序员面试题精选(33):两单向链表相交问题
- 经典的面试题:链表的相交与环问题 (一)
- 链表常见面试题一:基本问题
- MPAndrloidChart开源代码分析
- 链表常见面试题二:约瑟夫环
- 链表常见面试题三:解决链表带环问题
- 剑指offer:按之字形顺序打印二叉树
- 链表常见面试题四:解决链表相交问题
- c++实现复数类
- 计算机图形学学习记录(一)
- 实现日期类
- 旋转数组的最小数字
- c++动态内存管理
- 模拟new[]和delete[]操作符开辟内存空间及释放内存空间过程
- string类的两种实现方法及string的一些成员函数的实现
- string类的写时拷贝