题目:力扣92:反转链表II
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
示例 1:
输入: head = [1,2,3,4,5], left = 2, right = 4
输出: [1,4,3,2,5]
示例 2:
输入: head = [5], left = 1, right = 1
输出: [5]
题解
func reverseBetween(head *ListNode, left int, right int) *ListNode {
var dummy = &ListNode{Val:-1}
dummy.Next = head
pre := dummy
cur := head
//这里主要是为了挪位置,为了把cur挪到开始翻转的第一个位置,pre同步移动挪到cur前边
for i := 1; i < left; i++ {
pre = pre.Next
cur = cur.Next
}
//上边位置挪好了,正式开始移动,
for i := 0; i < right-left; i++ {
//比如234,cur在2这个位置,把cur.next也就是3提出来做个临时变量tmp,
tmp := cur.Next
//然后把cur下一个指针挪到下下个,也就是2指向4,
cur.Next = cur.Next.Next
//然后3下一个节点指向pre的下一个节点,这样3和2就挪过来了,
tmp.Next = pre.Next
//然后pre连起来,pre的下一个指向tem也就是3
pre.Next = tmp
}
return dummy.Next
}
反思
我在第10行的边界值弄错了,写的i=1,然后少翻转了一次