题解 | 两个链表的第一个公共结点
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,你说你不看答案,谁想得到这么处理............ 真服了