160.相交链表

这道题很有意思,让我弄明白了关于链表的一些东西,怎么比较两个链表是否相等?不需要两个链表开始,一个一个地next去比较,我最初就陷进去了,后来我发现,只要直接比较这两个链表就好了。即直接l1 == l2,这样比较就行了。所以,就有了第一种做法,遍历l1链表,每次都将链表的地址放进map中,然后l1.next,接下来再第二个链表l2中也是一个个进行遍历,每次比较是否相等,代码如下:

160.相交链表

不过很遗憾,这种做法并不是O(1)内存,因为新开了一个map

 

接下来就是我看到的题解,那种比较浪漫的解法了。假如两个链表从某个节点开始,那么从那个节点到最后都是相等的,也就是说这两个链表从同一个位置出发,假如要到达同一个终点的话,那么他们所走过的路都是相同的。那么,我们可以先求出两个链表的长度,然后,让长的那个链表先走两个链表的长度差的距离,这样就保证了到时候两个链表同时出发了,接下来只要在某个节点上发现两个链表相等,那么该节点就是他们的相交节点。如果不相等,则两个链表都向下走,假如最后都不相等,说明他们错过了。代码如下:

160.相交链表