当前位置: 首页 > 编程日记 > 正文

19.Remove Nth Node From End of List

方法1:由于链表不能随机访问,所以很自然的想法是第一遍得到链表长度,然后计算倒数第n个结点的位置,但这样时间复杂度O(n2),想到用空间换取时间,可以用一个地址数组存储每个结点的地址,然后直接删除掉倒数第n个,返回头结点。

方法2:上面的方法虽然时间复杂度达到了线性,但是需要额外的空间,更好的方法是采用双指针追赶,设慢指针为pre,快指针为post,先让post指针走n步,然后pre指针开始走,这样当post走到最后的时候,pre指针就指向需要删除结点的位置,因为删除需要前继结点的位置,所以每走一步就需要保存前继结点,最后需要特殊处理的就是删除头结点的话直接返回第二个结点就好了。

遍历法:

 1 class Solution {
 2 
 3 public:
 4 
 5        ListNode*removeNthFromEnd(ListNode* head, int n) {
 6 
 7               ListNode*t[100];
 8 
 9               int i = 0;
10 
11               while (head)
12 
13               {
14 
15                      t[i] =head;
16 
17                      ++i;
18 
19                      head =head->next;
20 
21               }
22 
23  
24 
25               int p = i -n;
26 
27               if (i == 1)
28 
29                      return NULL;
30 
31               else if (p ==0)
32 
33                      return t[p]->next;
34 
35               else
36 
37               {
38 
39  
40 
41                      t[p -1]->next = t[p]->next;
42 
43                      return t[0];
44 
45               }
46 
47        }
48 
49 };

双指针法:

 1 /**
 2 
 3  * Definition for singly-linked list.
 4 
 5  * struct ListNode {
 6 
 7  *    int val;
 8 
 9  *    ListNode *next;
10 
11  *    ListNode(int x) : val(x), next(NULL) {}
12 
13  * };
14 
15  */
16 
17 classSolution {
18 
19 public:
20 
21        ListNode* removeNthFromEnd(ListNode*head, int n) {
22 
23               ListNode*pre = head, *p = head, *t= head;
24 
25               for (int i = 0; i < n; i++)
26 
27                      t = t->next;
28 
29               if (!t)
30 
31                      return head->next;
32 
33               else
34 
35               {
36 
37                      while (t)
38 
39                      {
40 
41                             t = t->next;
42 
43                             pre = p;
44 
45                             p = p->next;
46 
47                      }
48 
49                      pre->next = p->next;
50 
51                      return head;
52 
53               }
54 
55  
56 
57  
58 
59        }
60 
61 };

转载于:https://www.cnblogs.com/InitialD/p/7348911.html

相关文章:

HTML 5中SEO可以用那些代码来做优化

头部代码 1、标题标签(title标签) 在HTML5中标题标签依然存在&#xff0c;其仍然具有不可替代的作用;不过我们看到还有更多的可供搜索引擎识别的代码&#xff0c;我们将改代码的等级微降。 2、元标签(meta标签) 字符集编码声明标签 该标签原本就是搜索引擎必看且首先要看的标签…

XCode 导入头文件不提示解决

File --> WorkSpace Settings ---> Build Sysytem ---> Legacy Build System

构建node.js基础镜像_在Android上构建Node.js应用程序

构建node.js基础镜像by Aurlien Giraud通过AurlienGiraud 在Android上构建Node.js应用程序-第1部分&#xff1a;Termux&#xff0c;Vim和Node.js (Building a Node.js application on Android - Part 1: Termux, Vim and Node.js) If you are excited about Node.js and own a…

MyEclipse设置默认的文档注释和背景色设置

转载于:https://www.cnblogs.com/999-/p/6086219.html

C语言之数组中你所不在意的重要知识

#include<stdio.h>void simpleArray();void main() {simpleArray();}//数组的简单操作 void simpleArray() {//数组的声明并赋值int c[5] { 1, 2, 3, 4, 5 };printf("\nC数组内存中占%d个字节",sizeof(c));// /0在内存中会占一个字节&#xff0c;可是仅仅针…

swift 4.0 创建tableview 自定义cell

// // ViewController.swift // AlamofileDemo // // Created by Alex on 2019/3/5. // Copyright © 2019 AlexanderYeah. All rights reserved. //import UIKit import Alamofire// 遵守协议方法 class ViewController: UIViewController,UITableViewDataSource,UITa…

ux体验网站 英国_?? 用户体验(UX)资源和工具的完整列表??

ux体验网站 英国by Jason Hreha杰森赫雷哈(Jason Hreha) ?? 用户体验(UX)资源和工具的完整列表?? (?? The Complete List of User Experience (UX) Resources & Tools ??) 超过100个链接&#xff0c;可以链接到最好的书籍&#xff0c;课程&#xff0c;新闻通讯和工…

Android 第三方图表类 MPChart 的使用

先看看条形图的的效果还不错是吧&#xff0c;实现这样的效果很合适呢&#xff01; 还有折线图、饼图很多效果 效果不错对吧~ 下面我们就先来看看条形图的实现方法吧&#xff01; 第一步&#xff1a; 引入第三方包 MPChart 如果你碰巧看过我之前写的Recycleview的博客这就简单多…

C++ STL的sort 函数 以及自定义的比较函数

没什么特别擅长的内容&#xff0c;先做个小笔记好了。在编程时&#xff0c;使用C的标准模板库&#xff08;STL&#xff09;能节约工作量&#xff0c;增加代码的可读性&#xff0c;能灵活运用无疑会提高编程的效率&#xff0c;俗话说&#xff1a;Write less, create more ~ 然后…

7-构造器方法

import UIKit// 1 构造器 // 结构体和类在实例的构造过程中会调用一种特殊的方法init&#xff0c;称之为构造器 // 构造器的主要作用是初始化存储属性 // 如果存储属性在构造器中没有初始化 在定义的时候也没有初始化 就会产生编译错误class Employee{let no:Int;var name:Stri…

模糊推理 控制 易于实现_代码“易于推理”是什么意思?

模糊推理 控制 易于实现by Preethi Kasireddy通过Preethi Kasireddy 代码“易于推理”是什么意思&#xff1f; (What does it mean when code is “easy to reason about”?) You’ve probably heard the expression “easy to reason about” enough times to make your ear…

简单介绍一下R中的几种统计分布及常用模型

统计学上分布有很多&#xff0c;在R中基本都有描述。因能力有限&#xff0c;我们就挑选几个常用的、比较重要的简单介绍一下每种分布的定义&#xff0c;公式&#xff0c;以及在&#xff32;中的展示。 统计分布每一种分布有四个函数&#xff1a;d――density&#xff08;密度函…

leetcode题解:Construct Binary Tree from Preorder and Inorder Traversal (根据前序和中序遍历构造二叉树)...

题目&#xff1a; Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. 说明&#xff1a; 1&#xff09;二叉树可空 2&#xff09;思路&#xff1a;a、根据前序遍历的特点, 知前序序列…

swift string,Int,Double相互转换

import UIKitvar str "Hello, playground" // 1 字符串转Int Double Float var str1 "818"; // 转Int var val1 Int(str1); // 转Double var val2 Double(str1); // 转float var val3 Float(str1);// 如果是25.0 转 Int&#xff0c;则需要先转为Doubl…

classlist使用方法_如何通过使用HTML5的classList API在没有jQuery的情况下操作类

classlist使用方法by Ayo Isaiah通过Ayo Isaiah 如何通过使用HTML5的classList API在没有jQuery的情况下操作类 (How to manipulate classes without jQuery by using HTML5s classList API) As a front end developer, you often need to change CSS rules based on how a us…

键盘码 ascii码

ASCII码表 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUT 32 (space) 64 96 、 1 SOH 33 &#xff01; 65 A 97 a 2 STX 34 ” 66 B 98 b 3 ETX 35 # 67 C 99 c 4 EOT 36 $ 68 D 100 d 5 ENQ 37 % 69 E 101 e 6 ACK 38 & 70 F 102 f 7 BEL …

Swift -布局框架SnapKit使用

SnapKit 1 安装 SnapKit github地址 2 文档地址 在线文档 // // ViewController.swift // SK_SnapKit // // Created by coder on 2019/3/6. // Copyright © 2019 AlexanderYeah. All rights reserved. //import UIKit import SnapKitclass ViewController: UIVie…

Hadoop概念学习系列之为什么hadoop/spark执行作业时,输出路径必须要不存在?(三十九)...

很多人只会&#xff0c;但没深入体会和想为什么要这样&#xff1f; 拿Hadoop来说&#xff0c;当然&#xff0c;spark也一样的道理。 输出路径由Hadoop自己创建&#xff0c;实际的结果文件遵守part-nnnn的约定。 如何指定一个已有目录作为Hadoop作业的输出路径&#xff0c;作业将…

已知环境静态障碍物避障_我女儿如何教我无障碍环境

已知环境静态障碍物避障by Drew通过德鲁 我女儿如何教我无障碍环境 (How my daughter taught me about accessibility) 在过去的几个月里&#xff0c;花了很多时间学习编程知识&#xff0c;这真是令人大开眼界。 面对似乎无穷无尽的技术和概念(即使是最简单的事物)&#xff0c…

IIS 部署 node.js ---- 基础安装部署

一些可能有用的相关文章&#xff1a; https://blogs.msdn.microsoft.com/scott_hanselman/2011/11/28/window-iisnode-js/ http://blog.csdn.net/puncha/article/details/9047311 20161123&#xff0c;这几天看了一些相关文章&#xff0c;觉得说的不太清楚&#xff0c;记录一下…

Qt中的 Size Hints 和 Size Policies

sizeHint 这个属性所保存的 QSize 类型的值是一个被推荐给窗口或其它组件&#xff08;为了方便下面统称为widget&#xff09;的尺寸&#xff0c;也就是说一个 widget 该有多大&#xff0c;它的一个参考来源就是这个 sizeHint 属性的值&#xff0c;而这个值由 sizeHint() 函数来…

atom 中首次使用git_使用Atom获得更好的Git提交消息

atom 中首次使用gitby Hasit Mistry通过Hasit Mistry 使用Atom获得更好的Git提交消息 (Get Better Git Commit Messages with Atom) Recently, I came across two enlightening posts about writing better Git commit messages. These posts give suggestions about how a we…

正确理解ThreadLocal

详见&#xff1a;http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt107 首先&#xff0c;ThreadLocal 不是用来解决共享对象的多线程访问问题的&#xff0c;一般情况下&#xff0c;通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象&#xff0c;其他线程…

PHP-密码学算法及其应用-对称密码算法

转自&#xff1a;http://www.smatrix.org/bbs/simple/index.php?t5662.html //目录1. PHP的散列函数及其应用2. PHP中的对称密码算法及其应用3. PHP的公钥密码算法及其应用///2 PHP中的对称密码算法及其应用前一段时间一直想写完PHP中的密码学算法及其应用的三大部分…

Swift4 String截取字符串

var str1 "AlexanderYeah";// 1 截取字符串的第一种方式 // prefix 截取前3个字符串 var str2 str1.prefix(3); print(str2);// suffix 截取后3个字符串 var str3 str1.suffix(3); print(str3);// 2 截取一个范围的字符串 // 从0开始 到倒数第二位结束 let idx1 …

angular react_Angular 2 vs React:将会有鲜血

angular reactAngular 2 has reached Beta and appears poised to become the hot new framework of 2016. It’s time for a showdown. Let’s see how it stacks up against 2015’s darling: React.Angular 2已达到Beta版本&#xff0c;并有望成为2016年炙手可热的新框架。该…

Welcome to Swift (苹果官方Swift文档初译与注解三十四)---241~247页(第五章-- 函数)

In-Out Parameters (全局参数) 像前面描述的参数变量,只能在函数体内进行修改,如果你需要函数修改的它的参数值,并且希望这些改变在函数调用结束后仍然有效,可以定义使用全局参数. 定义全局参数使用关键字inout,全局参数的值在函数调用的时候进行传递,在函数体内进行修改,最后函…

递归 尾递归_代码简报:递归,递归,递归

递归 尾递归Here are three stories we published this week that are worth your time:这是我们本周发布的三个值得您关注的故事&#xff1a; A beginner’s guide to recursion: 6 minute read 递归初学者指南&#xff1a; 6分钟阅读 Things you probably didn’t know you …

Hadoop 生态系统

当下 Hadoop 已经成长为一个庞大的生态体系&#xff0c;只要和海量数据相关的领域&#xff0c;都有 Hadoop 的身影。下图是一个 Hadoop 生态系统的图谱&#xff0c;详细列举了在 Hadoop 这个生态系统中出现的各种数据工具。这一切&#xff0c;都起源自 Web 数据爆炸时代的来临。…

socket通信——通过Udp传输方式,将一段文字数据发送出去

需求&#xff1a;通过Udp传输方式&#xff0c;将一段文字数据发送出去定义一个Udp发送端思路&#xff1a;1、建立updsocket服务2、提供数据&#xff0c;并将数据封装到数据包中。3、通过socket服务的发送功能&#xff0c;将数据包发出去4、关闭资源。import java.net.*; class …