赞
踩
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
一、应用辅助栈帮忙
我们利用一个 stack,然后不断迭代链表,每次取出两个节点放入 stack 中,再从 stack 中拿出两个节点。
借助 stack 后进先出的特点,放进去的时候是 1,2 。拿出来的时候就是 2,1 两个节点了。再把这两个节点串联起来,重复这个逻辑遍历完整个链表,就可以做到两两反转的效果了。虽然用到了 stack,但因为只存了两个元素,所以空间复杂度还是O(1),时间复杂度是 O(n)。
二、递归法
使用递归来解决该题,主要就是递归的三部曲:
递归三部曲:
1.找整个终止条件:递归应该在什么时候结束
2.本级递归需要做什么:在这一级递归中应该完成什么任务
3.找返回值,应该返回给上一级什么信息
既然递归是一个反复调用自身的过程,这就说明它每一级的功能都是一样的,因此我们只需要关注一级递归的解决过程即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。