面试中常见链表问题10:交叉链表的第一个公共节点
来源:互联网 发布:手机百度软件下载 编辑:程序博客网 时间:2024/05/16 09:41
给定两个链表,如果这两个链表相交,则返回第一个相交的顶点,如果不相交,则返回空。比如A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3则返回c1节点。 方法一:(1)求出链表l1和l2的长度。(2)较长的链表先走|l1-l2|步。(3)设置两个指针,直到两个指针相等时,返回结果。ListNode *getIntersectionNode(ListNode *headA, ListNode *headB){if (headA == NULL || headB == NULL)return NULL;int len1 = 1;int len2 = 1;ListNode *p1 = headA;ListNode *p2 = headB;while (p1->next){len1++;p1 = p1->next;}while (p2->next){len2++;p2 = p2->next;}if (p1 != p2)return NULL;p1 = headA;p2 = headB;if (len1 > len2){int num = len1 - len2;while (num-- > 0){p1 = p1->next;}}else{int num = len2 - len1;while (num-- > 0){p2 = p2->next;}}while (p1 != p2){p1 = p1->next;p2 = p2->next;}return p1;}方法二:(1)设置两个指针,判断两个指针是否为空,且是否相等。(2)两个指针每次都走一步,当l1指针为空时,则把l1设置为链表2的头指针,l2指针为空时,则把l2指针设置为链表1的头指针。ListNode *getIntersectionNode(ListNode *headA, ListNode *headB){if(headA == NULL || headB == NULL)return NULL;ListNode *p1 = headA;ListNode *p2 = headB;while(p1 != NULL && p2 != NULL && p1 != p2){p1 = p1->next;p2 = p2->next;if(p1 == p2)return p1;if(p1 == NULL) p1 = headB;if(p2 == NULL) p2 = headA;}return p1;}
0 0
- 面试中常见链表问题10:交叉链表的第一个公共节点
- 两个链表的第一个公共节点问题
- 链表的第一个公共节点
- 链表的第一个公共节点
- 两个链表的公共第一个公共节点
- 剑指offer面试题目:两个链表的第一个公共节点
- 面试OR笔试21——两个链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 两个单向链表的第一个公共节点
- 两个链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- 两个链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- 两个链表的第一个公共节点
- 两个链表的第一个公共节点
- HTTP 头部信息和错误码汇总详细解释
- 剑指Offer----面试题26:复杂链表的复制
- JQuery_Ajax全解析
- [LeetCode][7]Reverse Integer解析与位运算实现 -Java实现
- JAVA 集合框架学习笔记
- 面试中常见链表问题10:交叉链表的第一个公共节点
- vivado 设置 多线程编译
- JAVA exception异常处理+I/O操作读写文件 笔记
- Android 自定义View可以监听ACTION_DOWN却监听不到ACTION_MOVE和ACTION_UP
- 传智播客参加中国计算机学会混合教学模式应用研讨会
- JAVA代码发送邮件示例和解释(二)
- JAVA 递归 汉诺塔+阶乘
- Java并发编程-同步辅助类之Semaphore
- Scala + Spark +Maven之Helloworld