zoukankan      html  css  js  c++  java
  • 【原创】Leetcode -- Reverse Linked List II -- 代码随笔(备忘)

    题目:Reverse Linked List II

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

    下面这段代码,有两个地方,一个是4、5行的dummy节点设置;另一个是11-14行,局部可视化到全局。

     1  ListNode *reverseBetween(ListNode *head, int m, int n) {
     2     if(m == n) return head;
     3     n -= m;
     4     ListNode prehead(0);
     5     prehead.next = head;
     6     ListNode* pre = &prehead;
     7     while(--m) pre = pre->next;        
     8     ListNode* pstart = pre->next;
     9     while(n--)
    10     {
    11         ListNode *p = pstart->next;
    12         pstart->next = p->next;
    13         p->next = pre->next;
    14         pre->next = p;
    15     }
    16     return prehead.next;
    17 }

    对于我,想记录的是第二点。

    局部可视化到全局的意思是每一次局部指针调整要完成一个完整的链表转换。也就是说不应该根据全局来考虑单步情况,而是单步情况就完成一个全局的实现。

    即: 1-2-3-4-5, m=2, n=4,  全局思想是 把2-4进行转换,再拼接到1-5中。局部思想是每一个单步都完成全局变化,不考虑n是多少。比如第一步在2处, 转换为1-3-2-4-5。

    这里有两个好处,1:代码简洁,前中后三个指针可完成所有的交换。2:需要考虑的情况少,不用像全局思路分两步执行。3:可递归的执行。

  • 相关阅读:
    7.6 C程序的存储空间布局
    7.10 setjmp和longjmp函数
    7.2 main函数
    7.8 存储器分配
    7.5 环境表
    7.1 进程环境 引言
    7.4 命令行参数
    7.3 进程终止
    电影名扬四海主题歌节奏强动感十足的经典歌曲!
    随便写点人生感悟
  • 原文地址:https://www.cnblogs.com/xiaoboCSer/p/4555440.html
Copyright © 2011-2022 走看看