题目:
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解法:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseBetween(head *ListNode, left int, right int) *ListNode {
preLeft := &ListNode{
Val: 0,
Next: head,
}
leftNode := head
rightNode := head
for i := 1; i < left; i ++ {
preLeft = preLeft.Next
leftNode = leftNode.Next
rightNode = rightNode.Next
}
// preLeft、leftNode已就位
rightNode = rightNode.Next
for j := left; j < right; j ++ {
tmp := rightNode.Next
rightNode.Next = leftNode
leftNode = rightNode
rightNode = tmp
}
if preLeft.Next.Next != nil {
preLeft.Next.Next = rightNode
}
preLeft.Next = leftNode
if left > 1 { // 如果移动超过1的话,preLeft.Next就不是head节点
return head
}
return preLeft.Next
}