题解 | 两个链表的第一个公共结点
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
/***
* 最简单的做法当时然用一个map,遍历一个链表放入map,遍历另外一个的时候看看map里有没有,但是这个空间复杂度不是O1
* 想要满足空间复杂度为O1按照之前的总结,就得双指针,但是双指针怎么指呢? 想破头也想不到,没想到啊没想到
* 看了答案才发现 a+b = b+a 构成两个新的链表,这两个新的链表长度还一样,就能用双指针了,这谁想得到......
* 这种题目没有意义!看过答案的恍然大悟,没看过的,想破头你也想不到
*
*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode slow = pHead1;
ListNode fast = pHead2;
if (pHead1 == null || pHead2 == null) {
return null;
}
boolean finishedOne = false;
while (slow != null) {
if (fast == slow) {
return fast;
}
if (slow.next == null && !finishedOne) {
slow = pHead2;
finishedOne = true;
} else {
slow = slow.next;
}
if (fast.next == null) {
fast = pHead1;
} else {
fast = fast.next;
}
}
return null;
}
}
感觉这种题目没有意义,虽然知道O1的空间复杂度,且需要遍历求解相同节点,最简单的方式是map,但是要求O1的空间复杂度,就想到双指针,可是这个双指针也不知道如何双指针去遍历啊。
直到看到答案,a+b = b+a,你说你不看答案,谁想得到这么处理............ 真服了
三奇智元机器人科技有限公司公司福利 65人发布
