查找和删除倒数第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. 当删除了倒 ...
随机推荐
- hdu5125(LIS)
相当于用多个O(nlog(n))LIS来做. // // main.cpp // 160322 // // Created by 陈加寿 on 16/3/22. // Copyright © 2016 ...
- 【BZOJ4448】[Scoi2015]情报传递 主席树+LCA
[BZOJ4448][Scoi2015]情报传递 Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有n名情报员.每名情报员能有若干名(可能没有)下线,除1名大头 ...
- Exponentiation(高精度大数)
Exponentiation Description Problems involving the computation of exact values of very large magnitud ...
- MogoDB 分片键
MongoDB 根据分片键分割 collection 中的文档,然后分配到分片集群的成员中. 分片键可以是一个存在于每个文件中的索引字段或者复合索引字段. MongoDB 使用不同范围的分片键值来分割 ...
- Markov Process
w Markov Process -- from Wolfram MathWorld http://mathworld.wolfram.com/MarkovProcess.html 谷歌背后的数学_ ...
- k8s 安装文档
k8s 安装文档 1.5 http://blog.csdn.net/bobpen/article/details/78958675
- 005-搭建框架-实现AOP机制【二】AOP技术
一.什么是AOP aspect-oriented programming,面向切面编程,对oop的一种补充. 著名示例,aspectj,spring+aspectj 二.aop之代码重构 2.1.代 ...
- corethink功能模块探索开发(一)根据已有模块推测目录结构
corethink是opencmf的一个开源版本,如果自己要进行二次开发,开发模块等,需要在官方开一个中级会员(50大洋吧),官网的一个“一键生成demo”就能给你最基础的目录结构,从而可以在此基础上 ...
- css样式之补充
css常用的一些属性: 1.去掉下划线 :text-decoration:none ;2.加上下划线: text-decoration: underline; 3.调整文本和图片的位置(也就是设置元素 ...
- bfc (收集的)
一些基本概念 viewport: 展现网页的媒体,比如窗口或者某个区域,它的大小是有限制的,为了不被平台术语所束缚,我们给他起名viewport,中文意思就是视口. canvas: 而我们在渲染网页的 ...