题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
class ListNode(param: Int) {
var next: ListNode = _
override def toString: String = {
var ret = param.toString
if (next != null) {
ret += "," + next
}
ret
}
}
object Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
def reverseBetween(head: ListNode,m: Int,n: Int): ListNode = {
// write code here
if (head == null || head.next == null) {
return head
}
val first = new ListNode(0)
first.next = head
var curr = first.next
var next: ListNode = null
var pre: ListNode = first
var index = 0
while (curr != null && index <= n) {
index += 1
next = curr.next
println("pre " + pre)
println("curr " + curr)
println("next " + next)
println()
var curr2: ListNode = curr
var next2: ListNode = null
var pre2: ListNode = null
while (curr2 != null && index >= m && index <= n) {
index += 1
next2 = curr2.next
println("pre2 " + pre2)
println("curr2 " + curr2)
println("next2 " + next2)
println()
curr2.next = pre2
pre2 = curr2
curr2 = next2
}
if (pre2 != null) pre.next = pre2
if (next2 != null) curr.next = next2
pre = curr
curr = next
}
first.next
}
引入first节点,使得反转的链表可以临时存放
