zoukankan      html  css  js  c++  java
  • leetcode------Reverse Linked List II

    标题: Reverse Linked List II
    通过率: 26.2%
    难度: 中等

    Reverse a linked list from position m to n. Do it in-place and in one-pass.

    For example:
    Given 1->2->3->4->5->NULLm = 2 and n = 4,

    return 1->4->3->2->5->NULL.

    Note:
    Given mn satisfy the following condition:
    1 ≤ m ≤ n ≤ length of list.

    单链表的逆序,遍历一遍全部逆序完成,本题不是全部逆序,是部分逆序。只用记录逆序开始点和结束点即可逆序过程如下图:

    初始状态:

    head->next = prev;

    prev = head;

    head = next;

    next = head->next

    第一次结束,如上图。

    整个过程是一个循环的过程,如下图:

    具体代码如下:

     1 class Solution:
     2     def reverseBetween(self, head, m, n):
     3         diff, dummy, current= n - m, ListNode(0), head
     4         dummy.next = head
     5         last_unswapped = dummy
     6         while current != None and m > 1:
     7             current, last_unswapped, m = current.next, current, m - 1
     8         prev, first_swapped = last_unswapped, current
     9         while current != None and diff >= 0:
    10             tmp = current.next
    11             current.next = prev
    12             prev = current
    13             current = tmp
    14             diff -= 1
    15         last_unswapped.next, first_swapped.next = prev, current
    16         return dummy.next
  • 相关阅读:
    汉诺塔问题
    opencv 增强现实(二):特征点匹配
    opencv 增强现实(一):特征点检测
    opencv 边缘检测原理
    opencv 图片旋转
    opencv 图片位移
    opencv 图片剪切
    opencv 图片缩放
    opencv 仿射变换
    opencv图像融合(大头)
  • 原文地址:https://www.cnblogs.com/pkuYang/p/4421520.html
Copyright © 2011-2022 走看看