123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package main
- /**
- * Definition for singly-linked list.
- * type ListNode struct {
- * Val int
- * Next *ListNode
- * }
- */
- // 1 <= m <= n <= len of list
- func reverseBetween(head *ListNode, m int, n int) *ListNode {
- var pre *ListNode
- curr, next := head, head.Next
- for cnt := 1; next != nil; cnt++ {
- if cnt == m {
- beforeBeg, beg := pre, curr
- for ; cnt != n; cnt++ {
- curr.Next = pre
- pre = curr
- curr = next
- next = next.Next
- }
- if beforeBeg != nil { // before beg -> end
- beforeBeg.Next = curr
- } else {
- head = curr // head is end
- }
- curr.Next = pre // end -> pre
- beg.Next = next // beg -> after end
- break
- }
- pre = curr
- curr = next
- next = next.Next
- }
- return head
- }
- // func main() {
- // n3 := ListNode{3, nil}
- // n2 := ListNode{2, &n3}
- // n1 := ListNode{1, &n2}
- // n0 := ListNode{0, &n1}
- // fmt.Println(list2str(reverseBetween(&n0, 3, 4)))
- // }
|