相交链表与反向链表:Java工程师高频面试算法.pptx

相交链表与反向链表:Java工程师高频面试算法.pptx

讲师:梦杰

讲给Java工程师的高频面试算法100题

相交链表:反向链表

01.算法思路分析

02.实例/代码演示

03.时间复杂度分析

目录

01

PARTONE

算法思路分析

01.算法思路分析

直观思路

问题的难点在于两个链表的头是不一致的,不知在什么地方相遇;

1.头距离相遇点的距离不同;

2.是否存在相遇点;

=》如果可以从后向前的访问链表问题会简单很多

公共部分长度相同

链表公共部分一定在两个链表的最后一段,且长度一致

分叉路口既是解

从后向前,两个链表的下一个节点不同,则当前节点为答案

01.算法思路分析

存在的问题

1

2

单向链表

不能通过翻转指针完成从后向前的动作。因为一定会出现一个节点有两个next的情况

指针还原

修改完后,如何复原两个链表

01.算法思路分析

Hash表

利用两个Hash表分别存储A和B的翻转链表,达到指针可以从后向前移动的要求,且对原链表无任何修改

01.算法思路分析

遍历A和B

遍历A和B,从而构建A和B的反向链表,存储在hashA和hashB中

01

反向遍历

从A和B的尾部向前遍历

02

返回

如果A和B的尾部不同,返回null,否则找到最远处相同的节点x即

hashA.get(x)!=hashB.get(x)

03

02

PARTTWO

实例/代码演示

02.实例/代码演示

1

2

3

4

5

6

A

B

ListNo

文档评论(0)

1亿VIP精品文档

相关文档