Leetcode--代码随笔(备忘)

题目:Reverse Linked List II

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

下面这段代码,有两个地方,一个是dummy节点的设置,4、5行;另一个是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:可递归的执行。

时间: 2024-08-24 09:48:18

Leetcode--代码随笔(备忘)的相关文章

代码整洁备忘(一)

无聊在看<代码整洁之道>,找到了一些自己以前没有注意的地方,在这里记录下来,备忘一下. 目前看完了第九章. 1.重复很多的代码是不好的,需要仔细考虑去掉无用的重复. 2.变量,函数,类等的命名要足够精确,精简&易于搜索. 3.函数尽可能的少用参数(3个以内),&不要向函数内传递bool,因为这明确的说明了这个函数干的不是一件事!函数的职责应该是单一的.函数应该尽可能的短小,过长的函数是不好的. 4.注释,能不用就不用,能少用就少用.能用好的名字说明的问题就不要用注释来说明.标记

C#常用代码片段备忘

以下是从visual studio中整理出来的常用代码片段,以作备忘 快捷键: eh 用途: 类中事件实现函数模板 private void MyMethod(object sender, EventArgs e) { throw new NotImplementedException(); } 快捷键: xmethod 有4个 用途: 类中公有静态方法的函数模板 public static void MyMethod(this object value) { throw new NotImpl

github提交代码——步骤备忘

打开git客户端,cd到要上传的项目文件夹下.   输入git init命令,回车,用来在当前项目的目录中生成本地的git管理库,我们可以发现在当前目录下多了一个.git的隐藏文件夹.   输入git add . 命令,回车,将项目中所有的文件添加到仓库中.如果想添加特定文件,把.换成对应的文件名就行了. 注意add后面有一个点,若是提交单独的文件,则可输入文件名.   输入git commit -m "first commit" 命令,本次提交的注释,双引号中的字符自定义修改.  

定位代码【备忘二】

_asm    {        call l        l :        pop eax            mov eval, eax    }    wchar_t buf[MAXBYTE] = { 0 };    _ltow_s(eval, buf, 16);

linux 相关代码路径备忘。

https://github.com/torvalds/linux/blob/master/net/core/dev.c?utf8=%E2%9C%93#L7736昨天 11:35 https://github.com/torvalds/linux/blob/master/net/core/sock.c?utf8=?#L56110:27 https://github.com/torvalds/linux/blob/master/net/core/dst.c?utf8=%E2%9C%93#L1541

[PHP] 商品类型规格属性后台管理(代码流程备忘)

实现界面 涉及到四张表,type(商品类型表),type_spec(商品类型规格关联表),attribute(商品属性表),attribute_value(商品属性值表) 新建基控制器BaseController.class.php,向上抽取出来的公用方法 BaseController.class.php <?php namespace Admin\Controller; use Think\Controller; class BaseController extends Controller

Extjs 随笔备忘

//Point1. Ext.define 是用来创建类的.可以用来创建一个自定义的类,在这个自定义类中,可以用extend来继承Ext中的组件类. 举例: Ext.define('Ext.ux.LiveSearchGridPanel', { extend: 'Ext.grid.Panel', requires: [ 'Ext.toolbar.TextItem', 'Ext.form.field.Checkbox', 'Ext.form.field.Text', 'Ext.ux.statusbar

P2.JS之距离约束(DistanceConstraint)备忘

关键代码: 1 //以下是地面和墙壁的代码 2 //下 3 var body = new p2.Body({ mass: 0, position: [0, -5]}); 4 var shape = new p2.Plane(); 5 body.addShape(shape); 6 world.addBody(body); 7 8 //右 9 body = new p2.Body({ angle: Math.PI / 2, mass: 0, position: [10, 0]}); 10 body

【代码备忘】火狐浏览器插件xpi自动从网站下载安装的代码

欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&

ffplay for mfc 代码备忘

之前上传了一个开源播放器工程ffplay for mfc.它将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下,并且使用MFC做了一套界面.它可以完成一个播放器播放视频的基本流程:解协议,解封装,视频/音频解码,视音频同步,视音频输出.此外还包含一些控制功能:播放,暂停/继续,前进,后退,停止,逐帧播放,全屏等:以及一些码流分析功能:视频解码分析和音频解码分析. 详细的软件使用就不仔细介绍了,本文简单介绍其中比较重要的模块的流程.以防长时间不看的话忘了~ 软件信息: