zoukankan      html  css  js  c++  java
  • 92. Reverse Linked List II

    Problem:

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

    Note: 1 ≤ mn ≤ length of list.

    Example:

    Input: 1->2->3->4->5->NULL, m = 2, n = 4
    Output: 1->4->3->2->5->NULL
    

    思路

    保存2个节点precur,其中pre指向第m-1个节点(从1开始算),而cur指向第m个节点。在每次循环中,cur->next指向的节点插入到prepre->next指向的节点中,然后经过操作cur->next = cur->next->nextcur->next指向的节点右移一位,经过n-m次操作后cur->next指向第n+1个节点,然后经过n-m次插入操作后原本m后面的节点m+1到n节点倒序排列在m-1和m(现在的第n节点)节点之间。

    Solution (C++):

    ListNode* reverseBetween(ListNode* head, int m, int n) {
        ListNode *dummy = new ListNode(0), *pre = dummy, *cur;
        dummy->next = head;
        for (int i = 0; i < m - 1; ++i) {
            pre = pre->next;
        }
        cur = pre->next;    //pre指向第m-1个节点,cur指向第m个节点
        for (int i = 0; i < n - m; ++i) {       //每次循环时把第m+i+1个节点插入到(重新排列之后的)第m-1个节点和第m个节点之间
            ListNode *tmp = pre->next;
            pre->next = cur->next;
            cur->next = cur->next->next;
            pre->next->next = tmp;
        }
        return dummy->next;
    }
    

    性能

    Runtime: 4 ms  Memory Usage: 8.9 MB

    相关链接如下:

    知乎:littledy

    欢迎关注个人微信公众号:小邓杂谈,扫描下方二维码即可

    作者:littledy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Apple MDM
    苹果核
    iOS自动化测试的那些干货
    Wifi 定位原理及 iOS Wifi 列表获取
    详解Shell脚本实现iOS自动化编译打包提交
    PushKit 占坑
    【译】使用 CocoaPods 模块化iOS应用
    NSMutableArray 根据key排序
    iOS 通过tag查找控件
    自己使用 2.常量变量,数据类型,数据的输入输出。
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12315294.html
Copyright © 2011-2022 走看看