传送门
牛客面试笔试必刷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:=prev
for i:=1;i<m;i++{
prev=prev.Next
}
current:=prev.Next
prev.Next=reserve(current,m,n)
return dump.Next
}
func reserve(head *ListNode,m int,n int) *ListNode{
current:=head
var prev *ListNode
for i:=m;i<n;i++{
next:=current.Next
current.Next=prev
prev=current
current=next
}
next:=current.Next
head.Next=next
current.Next=prev
return current
}
解析:
这题和昨天的题目类似,都是一道链表反转的题目,只不过这次它指定了反转的区间为题目增添了难度,这里博主的思路主要是我们将所需要反转的链表利用reserve
函数单独提取出来进行反转,最后在分别与头和为连接来实现指定区域的反转
疑问
这里有一个特例让博主卡了好几次,最后只能用特例卡掉,大家有什么新思路也可以一起探讨一下,回应大家和博主一起来刷算法题
示例:
{3,5} 1,1