[路飞]_今夜反转链表(二)

92. 反转链表 II

难度上升一级的反转链表;一样通过动画图片代码让你清晰明了理解反转链表;

看动画胜过千言万语

动态图

111.gif

静态图

未命名.008.jpeg

未命名.001.jpeg

未命名.002.jpeg

未命名.003.jpeg

未命名.004.jpeg

未命名.005.jpeg

未命名.006.jpeg

未命名.007.jpeg

未命名.009.jpeg

未命名.010.jpeg

未命名.011.jpeg

代码

var reverseBetween = function (head, left, right) {
  if (head === null) return null
  if (left === right) return head
  const header = new ListNode(-1)
  header.next = head
  let after = null
  let start = header
  for (let i = 0; i < left; i++) {
    start = start.next
    after = after ? after.next : header
  }

  let next = head
  for (let i = 0; i < right; i++) {
    next = next.next
  }

  const current = reverce(start, right - left + 1)
  after.next = current
  start.next = next
  function reverce(node, len) {
    let pre = null
    let current = node
    let next = node.next
    while (len--) {
      current.next = pre
      pre = current
      current = next
      next = next ? next.next : null
    }
    return pre
  }

  return header.next
}

复制代码

猜你喜欢

转载自juejin.im/post/7035650479702933517