链表题型解法

1.判断回文链表:栈

2.对链表进行荷兰国旗划分:第一种方法,定义6个指针,分别指向小于区,等于区,大于区的开头及结尾,遍历链表,填充区域,合并区域(判断区域是否为空)。第二种方法:遍历链表拷贝进数组中,直接荷兰国旗

3.对拥有随机指针的链表进行深拷贝:第一种方法,用哈希表map存储<原结点,拷贝结点>。第二种方法,将拷贝结点先插入原结点的后面一个,复制随机指针后,再分离链表。

4.判断链表是否有环:第一种方法,用哈希set,遍历链表时插入set中,若插入时发现set中已有结点,则是环起点结点,若遍历到空,则无环。第二种方法,用快指针和慢指针,快指针一次走两步,慢指针一次走一步,一直走到两指针相遇时,接着将快指针,重新置回起点,恢复一次走一步,然后两指针开始运动,将会在环的起点相遇。(神奇)

5.找到两个链表的相交结点:

步骤:

1)判断两个链表是否有环

2)若两个都无环:

方法1:

将其中一个链表遍历放入哈希set中,将另一个链表遍历并判断是否set中存在,若存在,返回此结点,若不存在,说明不相交

方法2:

分别用两指针遍历两个链表,记录长度,获得尾结点,如果两链表的尾结点相同。说明相交,不同说明不相交。得到两链表长度差值,重置两指针到链表的开头,先让长链表走完差值,这时剩余长度相同,相交点一定在剩余长度中。然后开始遍历比较,如果相同则返回结点。

3)若一个有环一个无环:

不可能相交

4)若都有环:

分三种情况:

第一种:两链表相交点在环的起点之前(判断两个链表的入环起点是否相同),将入环点作为终点,这时转换成无环链表相交问题。

第二种:两链表入环点不同,先得到一个入环点,接着通过链表将入环点转一圈,若遇到了另一个入环点,则两个入环点均为相交点。若一直重新走回原地还没有碰到另一个入环点,则进入第三种情况。

第三种:两链表有各自的环,不相交。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值