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个节点的问题的更多相关文章

  1. 在单链表和双链表中删除倒数第K个节点

    [说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“在单链表和双链表中删除倒数第K个节点”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解 ...

  2. 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点

    题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...

  3. 链表中删除倒数第K个节点

    问题描述 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 问题分析与解决 从问题当中,我们只能得到一个链表和要删除的第K个节点的信息,于是就有以下思路:如 ...

  4. 链表问题----删除倒数第K个节点

    在单链表和双链表中删除倒数第K个节点 分别实现两个函数,一个可以删除单链表中的倒数第K个节点,一个可以删除双链表中的倒数第k 个节点,要求时间复杂度是 O(N),空间复杂度是 O(1). [解析] 基 ...

  5. 算法总结之 在单链表和双链表中删除倒数第k个节点

    分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点 思路: 如果链表为空,或者k<1 参数无效 除此之外 让链表从头开始走到尾,每移动一步,就让k的值减1 ...

  6. lintcode:Remove Nth Node From End of Lis 删除链表中倒数第n个节点

    题目: 删除链表中倒数第n个节点 给定一个链表,删除链表中倒数第n个节点,返回链表的头节点.  样例 给出链表1->2->3->4->5->null和 n = 2. 删除 ...

  7. 【LeetCode题解】19_删除链表的倒数第N个节点(Remove-Nth-Node-From-End-of-List)

    目录 描述 解法:双指针 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解笔记可以访问我的 github. 描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回 ...

  8. 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 ...

  9. 删除链表的倒数第N个节点(三种方法实现)

    删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒 ...

随机推荐

  1. SSL证书的生成

    openssl工具下载路径:链接:https://pan.baidu.com/s/1o0-s8OplHZt55Cio2HmjVA 密码:u759 1.使用openssl工具生成一个RSA秘钥      ...

  2. 2588: Spoj 10628. Count on a tree

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5766  Solved: 1374 ...

  3. Unique Encryption Keys

    The security of many ciphers strongly depends on the fact that the keys are unique and never re-used ...

  4. EasyNVR智能云终端硬件与EasyNVR解决方案软件综合对比

    背景分析 互联网视频直播越来越成为当前视频直播的大势,对于传统的安防监控,一般都是局限于内网,无法成批量上云台.传统的海康和大华的平台虽然可以通过自身私有协议上云平台 集总管控,但是往往只是支持自身的 ...

  5. mysql 日期加减天数

    MySQL 为日期增加一个时间间隔:date_add() now()       //now函数为获取当前时间 select date_add(now(), interval 1 day); - 加1 ...

  6. 用SQL语句生成唯一标识

    以前都是在代码中生成GUID值,然后保存到数据库中去,今天发现用sql也能生成GUID值,觉得很新奇,所以记下来. sellect newid();  //得到的即为GUID值 此sql内置函数返回的 ...

  7. PSSH 批量管理服务器

    pssh命令是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,类似pdsh,个人认为相对pdsh更为简便,使用必须在各个服务器上配置好密钥认证访问. 1. ...

  8. Java基础 - 流程控制语句

    package com.demo4; /* * 流程控制语句 * 流程控制语句分类: * 顺序结构 * 代码从上往下按照顺序执行 * * 选择结构 * if * if (关系表达式1) { * 语句体 ...

  9. Python Selenium 自动化测试

    本文转载 作者:灰蓝蓝蓝蓝蓝蓝链接:http://www.jianshu.com/p/5188cb3ab790來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.更多技术博客 ...

  10. golang接收get/post请求并返回json数据

    // @router /d2 [post] func (c *MainController) D2() { // jsoninfo := c.GetString("ok") // ...