zoukankan      html  css  js  c++  java
  • Leetcode解题-链表(2.2.2)ReverseLinkedList

    题目:2.2.2 Reverse Linked List II

    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->nullptr, m = 2 and n = 4,

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

    Note: Given m, n satisfy the following condition: 1 <= m <= n <= length of list.

    链表旋转是个经典问题,可以锻炼我们操作链表的能力,值得好好学习一下。

    我的方法:对headtail特殊化处理

    m<=i<=n时,通过记录前继结点prev,简单的调转next指针方向,并记录m结点pm。最后迭代到n+1时,再处理firstpm->next)和lastp)结点的指向问题。


     

    更好的方法:一般化处理

    将整个过程一般化处理的方法为:不断地将当前结点cur插入到head的后面。(见下面图示)第一次将3插入到1后面,第二次将4插入到1后面,即1=>2=>3=>4旋转为1=>3=>2=>4。如果能解决的话,那么继续1=>3=>2=>4=>5就能旋转为1=>4=>3=>2=>5,从而解决问题。总结:首先举最简单的例子解决,然后看解决办法能否继续推广到更复杂一些的例子,避免复杂的特殊化处理


    代码实现

    理解了整体设计,自己实现或读代码就很简单了。开始真正处理前要记住headm的前一个结点)和pm(索引为m的结点),就可以开始旋转了。


     

  • 相关阅读:
    centos 7 安装zabbix 4.0
    django Middleware
    初探paramiko
    python中的反射
    python异常处理
    双绞线
    简易的CMDB服务端
    4-初识Django Admin
    数据资产管理实践纲要
    matplotlib 散点图,为不同区域的点添加不同颜色
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157641.html
Copyright © 2011-2022 走看看