ADT20 混淆编译

题目的关键是要让新链表和原有链表发送关联,可以通过这种关联来设置新链表的random pointer

思路:将新链表的元素插入到原有链表元素的后面,如下图所示,就可以根据原有链表的radom->next 就是新链表的random指针

所以分3步骤:

1 新元素插入

2 设置新链表的random

3 拆分大链表,回复old link 和new link


 1 /**
2 * Definition for singly-linked list with a random pointer.
3 * struct RandomListNode {
4 * int label;
5 * RandomListNode *next, *random;
6 * RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
7 * };
8 */
9
10 class Solution {
11 public:
12 RandomListNode *copyRandomList(RandomListNode *head) {
13
14 RandomListNode* pOld = head;
15 RandomListNode* pNew = NULL;
16 RandomListNode* pRes = NULL;
17
18 if(head == NULL) return NULL;
19
20 // insert every new node after old new node
21 while(pOld)
22 {
23 pNew = new RandomListNode(pOld->label);
24 if(pOld == head) pRes = pNew;
25 pNew->next = pOld->next;
26 pOld->next = pNew;
27 pOld = pNew->next;
28 }
29
30
31 pOld = head;
32 // constrct new‘s random pointer
33 while(pOld)
34 {
35 pNew = pOld->next;
36 if(pOld->random == NULL)
37 pNew->random == NULL;
38 else
39 pNew->random = pOld->random->next;
40 pOld = pNew->next;
41 }
42
43
44 // recover old‘s and new‘s next pointer
45 //恢复old list 和new list
46
47 pOld = head;
48
49 while(pOld)
50 {
51 pNew = pOld->next;
52 if(pNew == NULL)
53 pOld->next = NULL;
54 else
55 pOld->next = pNew->next;
56 pOld = pNew;
57 }
58
59 return pRes;
60 }
61 };

ADT20 混淆编译,布布扣,bubuko.com

时间: 2024-10-13 13:34:13

ADT20 混淆编译的相关文章

贴一段自动编译java,并混淆编译的代码

刚写的代码,做个记录 using Ionic.Zip; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ApiCloudModulePackage { class Program { static string

Android混淆编译时,用到gson-2.2.2.jar进行反射解析json数据时,报ClassCastException错误

在我的代码中,我使用方法是: public synchronized <T> T parseJson(String json, Class<T> classOfT) throws Exception{ T target = null; Gson gson = new Gson(); target = gson.fromJson(json, classOfT); return target; } 之后在我的Activity中使用方式是: String addModel = JsonP

android开发之——混淆编译

众所周知,android的apk文件是非常容易被反编译的,这样对于开发者来说,辛辛苦苦开发应用被破解是一件很令人懊恼的事情,谷歌也认识到了这一点,所以从2.3之后就为开发者提供了一个代码混淆工具proguard,新版的adt创建的工程默认都会有多两个代码混淆文件. proguard.cfg就是传说中的混淆脚本了,具体内容如下: -optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dont

windows系统OLLVM + NDK 混淆编译环境搭建

一.环境搭建: 系统:win10_X64 ndk版本:ndk-r12b(ndk-r12b后续版本也适用) cmake-3.9.1-win64-x64.msi  用于针对不同编译器生成源代码构建文件,如使用VS则生成(.sln)等VS配置文件,如果使用gcc则生成(Makefile) mingw-w64-install.exe  基于windows的GNU gcc编译器 python2.7  跑python脚本,不要使用3.0及以上版本 cmake,mingw,python下载地址(百度网盘):h

混淆编译

在以release模式下打包apk时会自动运行ProGuard,这里的release模式指的是通过ant release命令或eclipse project->android tools->export signed(unsigned) application package生成apk.在debug模式下为了更快调试并不会调用proguard. http://www.trinea.cn/android/proguard-use/ 问题详查 http://proguard.sourceforge

gulp打包js多个文件夹并压缩混淆,编译ES6语法

感觉和webpack的步骤差不多 首先安装gulp:参考上一篇 安装完之后 新建一个文件目录起名 在当前目录下打开cmd 执行:npm init 创建package.json文件 然后安装第一个插件gulp-uglify 执行: cnpm install gulp-uglify --save-dev (这里暂时都用淘宝镜像cnpm) 这时候已经可以开始压缩es5的js文件了,但是我们要编译es6语法,那就需要babel 执行: cnpm install gulp-babel --save-dev

android 混淆参数 说明 转的

关于混淆编译也主要是从网上学习的,决定对网上的进行总结,供大家一起学习,研究,东西主要都是网友们写的,我这里借鉴了,文章最后是网友的原文地址: 1,什么是混淆编译 ProGuard是一个免费的java类文件压缩,优化,混淆器.它探测并删除没有使用的类,字段,方法和属性.它删除没有用的说明并使用字节码得到最大优化.它使用无意义的名字来重命名类,字段和方法. ProGuard的使用是为了: 1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用. 2.创建的程序和程序库很难使用反向工程

Jocky混淆JAVA代码(保护你的JAVA项目)

1.1 什么是Jocky? 我们知道,Java是一种跨平台的编程语言,其源码(.java文件)被编译成与平台无关的字节码(.class文件),然后在运行期动态链接.这样,编译后的类文件中将包含有符号表,从而使得Java程序很容易被反编译.相信每一个Java开发人员,都曾经用过诸如Jad之类的反编译器,对Java的class 文件进行反编译,从而观察程序的结构与实现细节.如此一来,对于那些需要严格进行知识产权保护的Java应用,如何有效的保护客户的商业投资,是开发人员经常需要面对的问题.   于是

在android中,编译的项目使用到第三方jar的导入方法 终极版!

1,在android系统环境中编译自己的项目时,往往会用到第三方jar包.这些jar包在eclipse中添加编译,一路畅通,因为eclipse已经帮助你配置好了.但是当把这个项目拷贝到系统环境中编译时,jar包就会不管用.下面是自己遇到的问题,通过查找网上的资料,遇到各种问题,最后终于解决.通过博客总结一下,给大家分享. 条件:例如:先在eclipse中开发的应用,用到support-v4包和第三方pinyin4j-2.5.0.jar. 移植到系统项目中,编译不通过.以系统的music应用为例.