给你单链表的头指针
head和两个整数left和right,其中left <= right。请你反转从位置left到位置right的链表节点,返回 反转后的链表 。
输入: head = [1,2,3,4,5], left = 2, right = 4
输出: [1,4,3,2,5]
第一种解法
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseBetween(head *ListNode, left int, right int) *ListNode {
res := &ListNode{}
res.Next = head
pre := res
// 遍历到开始的反转开始节点
for i := 0; i < left-1; i++ {
pre = pre.Next
}
// 标记当前开始需要反转的节点
cur := pre.Next
for i := 0; i < right-left; i++ {
// 前后指针开始反转
next := cur.Next
cur.Next = next.Next
next.Next = pre.Next
pre.Next = next
}
return res.Next
}