查找和删除倒数第n个节点的问题
class ListNode
{
int val;
ListNode next;
ListNode(int x)
{
val = x;
}
}
public class NthNodeFromEnd {
public ListNode removeNthFromEnd(ListNode head, int n)
{
ListNode p = head;
ListNode q = head;
for(int i = 0; i < n ; i++)
{
p = p.next;
}
if(p == null)//如果p==null,说明倒数第n个就是第一个节点,即头结点。
{
head = head.next;
return head;
}
while(p.next != null)
{
p = p.next;
q = q.next;
}
if(q.next != null)
{
q.next = q.next.next;
} return head;
}
public ListNode removeNthFromEnd2(ListNode head, int n)
{
//因为要删掉倒数第n个节点,那就必须找到倒数第n+1个节点
//如果倒数第n正好是头结点,那么头结点前面没有节点了很麻烦,我们可以设置一个节点作为头结点之前的节点
//设置一个头结点,这样就不用单独对原始头结点处理了
ListNode dumy = new ListNode(0);
dumy.next = head;
ListNode p = dumy;
ListNode q = dumy;
for(int i = 0; i < n; i ++)
{
p = p.next;
}
while(p.next!=null)
{
p = p.next;
q = q.next;
}
q.next = q.next.next;
return dumy.next;
}
//找倒数第n个节点
public ListNode findNthFromEnd(ListNode head, int n)
{
ListNode p = head;
ListNode q = head;
for(int i = 0; i < n-1; i ++)
{
p = p.next;
}
while(p.next!=null)
{
p = p.next;
q = q.next;
}
return q;
} public static void main(String[] args)
{
NthNodeFromEnd rn = new NthNodeFromEnd();
ListNode n1 = new ListNode(1);
ListNode n = rn.removeNthFromEnd(n1, 1);
System.out.println(rn.findNthFromEnd(n1, 1).val);
if(n == null)
{
System.out.println(n);
}
while(n!= null)
{
System.out.println(n.val);
n = n.next;
}
}
}
查找和删除倒数第n个节点的问题的更多相关文章
- 在单链表和双链表中删除倒数第K个节点
[说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“在单链表和双链表中删除倒数第K个节点”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解 ...
- 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...
- 链表中删除倒数第K个节点
问题描述 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 问题分析与解决 从问题当中,我们只能得到一个链表和要删除的第K个节点的信息,于是就有以下思路:如 ...
- 链表问题----删除倒数第K个节点
在单链表和双链表中删除倒数第K个节点 分别实现两个函数,一个可以删除单链表中的倒数第K个节点,一个可以删除双链表中的倒数第k 个节点,要求时间复杂度是 O(N),空间复杂度是 O(1). [解析] 基 ...
- 算法总结之 在单链表和双链表中删除倒数第k个节点
分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点 思路: 如果链表为空,或者k<1 参数无效 除此之外 让链表从头开始走到尾,每移动一步,就让k的值减1 ...
- lintcode:Remove Nth Node From End of Lis 删除链表中倒数第n个节点
题目: 删除链表中倒数第n个节点 给定一个链表,删除链表中倒数第n个节点,返回链表的头节点. 样例 给出链表1->2->3->4->5->null和 n = 2. 删除 ...
- 【LeetCode题解】19_删除链表的倒数第N个节点(Remove-Nth-Node-From-End-of-List)
目录 描述 解法:双指针 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解笔记可以访问我的 github. 描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回 ...
- LeetCode第[19]题(Java):Remove Nth Node From End of List(删除链表的倒数第N个节点)
题目:删除链表的倒数第N个节点 难度:Medium 题目内容: Given a linked list, remove the n-th node from the end of list and r ...
- 删除链表的倒数第N个节点(三种方法实现)
删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒 ...
随机推荐
- oracle 查看表是否被锁
--以下几个为相关表SELECT * FROM v$lock;SELECT * FROM v$sqlarea;SELECT * FROM v$session;SELECT * FROM v$proce ...
- Redis 单机版本安装
亲装! 1.linux 系统镜像 redis 版本 使用redis-3.2.8.tar.gz(截止2017年4月的最新稳定版) 在安装之前先安装下redis 需要的环境 wget http://do ...
- api xml database 设计一种数据库
w 问题 0-新增和读取,可以忽略更新和删除: 1-被请求方的xml dom结构多层且不定,且未来可能增删某些键(dom节点),且键值长度最值可能无法确定: 3-请求过程可能出现异常exception ...
- 在腾讯云服务器上实现java web项目部署
----------------------------博主讲废话 几天前搞了一台体验七天的腾讯云服务器.之前已实现在新浪云下java web项目的部署,不需要自己搭建环境,比较简单,而且自 己也偷懒 ...
- 任务03—简单程序测试及 GitHub Issues 的使用
任务三主要是测试别人的代码找bug,和根据别人提出的bug修改自己的代码. 首先是测试的对象是jinlinchao的代码,根据他的代码很容易发现几个问题,一开始,我是打算,将发现的问题一个一个提上去, ...
- getDomain(url)-我的JavaScript函数库-mazey.js
获取链接地址中域名,如mazey.net,www.mazey.net,m.mazey.net. 参数:url 必需function getDomain(url){ var a = documen ...
- java线程:Atomic(原子)
.何谓Atomic? Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位.计算机中的Atomic是指不能分割成若干部分的意思.如果一段代码被认为是Atomic,则表示这段代码在执行过程中, ...
- C 和 C++ 的标准库分别有自己的 locale 操作方法,C 标准库的 locale 设定函数是 setlocale(),而 C++ 标准库有 locale 类和流对象的 imbue() 方法(gcc使用zh_CN.GBK,或者zh_CN.UTF-8,VC++使用Chinese_People's Republic of China.936或者65001.)
转自:http://zyxhome.org/wp/cc-prog-lang/c-stdlib-setlocale-usage-note/ [在此向原文作者说声谢谢!若有读者看到文章转载时请写该转载地址 ...
- 【Nginx】HTTP请求的11个处理阶段
Nginx将一个HTTP请求分成多个阶段.以模块为单位进行处理.这样做的优点是使处理过程更加灵活.减少耦合度.HTTP框架将处理分成了11个阶段,各个阶段能够包括随意多个HTTP模块并以流水线的方式处 ...
- 001-Spring在代码中获取bean的几种方式
一.概述 方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类Applicati ...