查找和删除倒数第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. 当删除了倒 ...
随机推荐
- NodeJS版本EasyDarwin开源流媒体服务器开发心得
title: Node版本EasyDarwin开发心得 date: 2018-03-27 22:46:15 tags: 年后着手Node版本EasyDarwin的开发工作,截止到今天2018年03月2 ...
- 借助EasyNTS云组网,无需拉专线,也能解决设备现场无公网固定IP的问题
一.产品背景 为了帮助企业和个人用户解决网络访问和设备控制的问题,我们研发了一款创新型产品:EasyNTS云组网系统.什么是EasyNTS,什么是云组网呢? 在解释之前,我们先来了解几个在凡是涉及网络 ...
- FZU 1063 三维扫描(三维连通块)
Accept: 415 Submit: 1291 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description 工业 ...
- Sql注入基础一
凡是带入数据库查询的都有可能是注入. 整个数据包 Sql注入原理? 网站数据传输中,接受变量传递的值未进行过滤,导致直接带入数据库查询执行的操作问题. Sql注入对于渗透的作用? 获取数据(网 ...
- Hystrix 基于注解开发
不对地方,请指出!相互学习! 背景:Hystrix 没有无参构造函数,所以Spring管理bean时候没办法进行管理, 每个类都进行编码 个人感觉不方便,基于注解开发!方便速度快,不侵入代码!引入的j ...
- C#动态删除控件
foreach (Control var in panel.Controls) { if (var is Billet) { panel.Controls.Remove(var); var.Dispo ...
- C++程序设计练习(一)
// 1. 在屏幕上输出内容 #include<iostream> using namespace std; int main(){ int i= 1; cout<<" ...
- 003-整型入栈指令(iconst、bipush、sipush、ldc)
一.概述 官网:http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html参考地址:http://www.linmuxi.com/201 ...
- 字符串之strstr
功能:查找第二个字符串是否存在第一个字符串中. 输入:字符串1,字符串2 返回值:成功返回str1中的位置,失败返回NULL #include <iostream> using names ...
- 和openjdk在一起的第一天-第一次接触有些生疏,就先熟悉一下吧
暂时搞到了openjdk7,就将就着看吧,(为什么csdn全部都是收费啊,llllj),但是还是决定先读这个openjdk7 还有,不知道怎么的就想试试markdown,也不知道好用不 hello w ...