传送门
牛客面试笔试必刷101题 ---------------- 链表内指定区间反转
题目以及解析
题目
解题代码及解析
package main
import _"fmt"
import . "nc_tools"
/** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类
*/
func reverseBetween( head *ListNode , m int , n int ) *ListNode {if head==nil||head.Next==nil||m==n{return head}var prev *ListNode=&ListNode{Next:head}dump:=prevfor i:=1;i<m;i++{prev=prev.Next}current:=prev.Nextprev.Next=reserve(current,m,n)return dump.Next
}func reserve(head *ListNode,m int,n int) *ListNode{current:=headvar prev *ListNodefor i:=m;i<n;i++{next:=current.Nextcurrent.Next=prevprev=currentcurrent=next}next:=current.Nexthead.Next=nextcurrent.Next=prevreturn current
}
解析:
这题和昨天的题目类似,都是一道链表反转的题目,只不过这次它指定了反转的区间为题目增添了难度,这里博主的思路主要是我们将所需要反转的链表利用reserve
函数单独提取出来进行反转,最后在分别与头和为连接来实现指定区域的反转
疑问
这里有一个特例让博主卡了好几次,最后只能用特例卡掉,大家有什么新思路也可以一起探讨一下,回应大家和博主一起来刷算法题
示例:
{3,5} 1,1