IMWeb提升营Day6 | 训练题36:两个链表的第一个公共结点
来源:互联网 发布:formal mac 编辑:程序博客网 时间:2024/05/20 20:01
题目描述
输入两个链表,找出它们的第一个公共结点。
思路一:暴力破解
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*//* * 思路一:暴力找,这也能过 */class Solution {public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { ListNode* p1 = pHead1; ListNode* p2 = pHead2; while(p1 != NULL){ p2 = pHead2; while(p2 != NULL){ if(p2->val == p1->val) return p2; p2 = p2->next; } p1 = p1->next; } return NULL; }};
思路二:发现两链尾部合并的规律
/* * 思路二:注意观察来给你个链表有公共结点的话就一定会在第一个公共节点之后合成一条链 * 找出两个链表的长度,然后先走比较长的那条,再一起走,一定能找到 */class Solution {public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { ListNode* p1 = pHead1; ListNode* p2 = pHead2; //找两条链的长度 int len1 = 0, len2 = 0; while(p1 != NULL){ len1++; p1 = p1->next; } while(p2 != NULL){ len2++; p2 = p2->next; } //先把长的那条走完 p1 = pHead1; p2 = pHead2; if(len1 >len2){ int cha = len1 - len2; while(cha--){ p1 = p1->next; } } if(len2 >len1){ int cha = len2 - len1; while(cha--){ p2 = p2->next; } } //然后一起走 while(p1 != NULL){ if(p1 == p2) return p1; p1 = p1->next; p2 = p2->next; } return NULL; }};
思路三:不需要求长度的一种方法
/* * 思路三:不用求长度,p1扫完链1再扫链2,p2扫完链2再扫链1 * 这样的话p1和p2扫的节点个数是一样的,最终一定会碰到一起,或者遍历到最后的两个NULL */class Solution {public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { ListNode* p1 = pHead1; ListNode* p2 = pHead2; while(p1 != p2){ p1 = (p1 == NULL ? pHead2 : p1->next); p2 = (p2 == NULL ? pHead1 : p2->next); } return p1; }};
阅读全文
0 0
- IMWeb提升营Day6 | 训练题36:两个链表的第一个公共结点
- IMWeb提升营Day6 | 训练题34:第一个只出现一次的字符
- 【36】两个链表的第一个公共结点
- 36、两个链表的第一个公共结点
- [编程题]两个链表的第一个公共结点
- IMWeb提升营Day6 | 训练题33:丑数
- IMWeb提升营Day3 | 训练题16:合并两个排序的链表
- IMWeb提升营Day6 | 训练题31:整数中1出现的次数
- IMWeb提升营Day6 | 训练题32:把数组排成最小的数
- 找出两个链表的第一个公共结点--总结
- 找出两个链表的第一个公共结点
- 找两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 两个链表的第一个公共结点
- 面试中关于Java你所需知道的的一切
- Combination Sum IV 组合数
- 关于TP框架中验证码的制作
- java中你所不知道的'=='
- POJ 1616 Harmonic Periods 笔记
- IMWeb提升营Day6 | 训练题36:两个链表的第一个公共结点
- [LeetCode] Combination Sum 和确定的组合数的个数
- POJ 1617 Crypto Columns 笔记
- java关键字valatile超详细解析
- Spring Boot 初识
- ssctf-pwn2从此入坑不在起
- [LeetCode]Burst Balloons
- POJ 1618 Decorations 笔记
- ROS_Introduction