一、 下面是leetcode92题,借教官的话,两种方法和其他的链表解题的方法差不多,一个是插入法另外一个就是在链表上直接操作进行反转。
先说第一种:插入法,需要先找出left的前节点,left节点,然后left节点后面到right节点不断往pre节点后面插入,最终完成反转,代码如下:
第二种:穿针法
这种方法需要指定几个节点,left的前节点,left节点,right节点,right.next节点,确定节点后要把链表pre和right的next 置空,也就是断开链表,然后单独对区间部分进行反转,代码可以参考leetcode206的题解,反转完后再拼接起来,具体代码如下:
二、第二题是两两交换链表中的节点,这两个题目都是比较经典的题目需要熟悉掌握的,那下面带来两种解法,第一种是建立头节点交换法,第二个是递归。
先说第一种,在虚拟头节点交换后,让指针指向需要交换的两个节点且交换完成的奇数节点,至于3个节点的交换方法自己可以思考一下,不止一种,下面是代码:
第二种则是递归,这个不太好想到,但是比较简洁,我们可以把前两个节点当成一个整体,后面的节点当成一个整体,每次完成的是将奇数节点的指针指向后面节点那个整体,而后面节点返回的头部就是反转后的偶数节点,那么在函数传入的时候就每次把偶数节点的下一个节点当成一个头节点传入到函数中,函数每次为我们返回调整好后的偶数节点,以此类推直到传入的奇数节点为空或者next节点为空结束递归。代码如下: