题目

例如 1-2-3-4 删除2,1-2-3-4-5 删除3
例如 a=1,b =2

java代码

/**
* @Description:删除中间节点和a/b处节点
* @Author: lizhouwei
* @CreateDate: 2018/4/6 10:12
* @Modify by:
* @ModifyDate:
*/
public class Chapter2_3 { //删除中间节点
public Node removeMidNode(Node head) {
if (head == null || head.next == null) {
return null;
}
Node node1 = head;
Node node2 = node1.next.next;
//获取中间节点的前驱节点 ,因为让node2早走一步,当node2走完时,node1刚好是中间节点的前驱节点
while (node2.next != null && node2.next.next != null) {
node1 = node1.next;
node2 = node2.next.next;
}
node1.next = node1.next.next;
return head;
} //删除a/b处的节点
public Node removeNodeByRatio(Node head, int a, int b) {
if (head == null) {
return null;
}
Node cur = head;
int len = 0;//节点长度
while (cur != null) {
len++;
cur = cur.next;
}
//边界检查
if (a < 0 || b <= 0) {
return head;
}
int k = (int)Math.ceil((double)(a* len)/(double)b);
//如果k==1 说明a/b处是头节点
if (k == 1) {
head = head.next;
}
if(k>1){
cur =head;
//提前减一,这样当k=1时,节点为 k处的前驱节点
while (--k!=1){
cur = cur.next;
}
cur.next = cur.next.next;
}
return head;
}
public void printLink(Node head) {
System.out.println();
while (head != null) {
System.out.print(head.vlaue + " ");
head = head.next;
}
}
//测试
public static void main(String[] args) {
Chapter2_3 chapter = new Chapter2_3();
Link link1= new Link();
Link link2= new Link();
//构造两个链表
for (int i = 10; i >0 ; i--) {
link1.add(i);
link2.add(i);
}
chapter.printLink(link1.head);
Node head1= chapter.removeMidNode(link1.head);
chapter.printLink(head1);
chapter.printLink(link2.head);
Node head2= chapter.removeNodeByRatio(link2.head,1,2);
chapter.printLink(head2); }
}

《程序员代码面试指南》第二章 链表问题 删除中间节点和a/b处节点的更多相关文章

  1. 程序员代码面试指南 IT名企算法与数据结构题目最优解

    原文链接 这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮 ...

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

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

  3. 《程序员代码面试指南》第三章 二叉树问题 遍历二叉树的神级方法 morris

    题目 遍历二叉树的神级方法 morris java代码 package com.lizhouwei.chapter3; /** * @Description:遍历二叉树的神级方法 morris * @ ...

  4. [程序员代码面试指南]链表问题-将单链表的每k个节点之间逆序

    题目描述 给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点. 题解 内部函数reverse实现链表beg到end的翻转 ...

  5. 左神算法书籍《程序员代码面试指南》——2_03删除链表的中间节点和a/b处的节点

    [题目]给定链表的头节点head,实现删除链表的中间节点的函数.例如:不删除任何节点:1->2,删除节点1:1->2->3,删除节点2:1->2->3->4,删除节 ...

  6. 左神算法书籍《程序员代码面试指南》——2_02在单链表和双链表中删除倒数第k个字节

    [题目]分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点.[要求]如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1).[题解]从头遍历链表, ...

  7. 程序员代码面试指南:IT名企算法与数据结构题目最优解

      第1章栈和队列 1设计一个有getMin功能的栈(士★☆☆☆) 1由两个栈组成的队列(尉★★☆☆) 5如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 8猫狗队列(士★☆☆☆)10用一个栈实现另一 ...

  8. 左神算法书籍《程序员代码面试指南》——3_05Morris遍历二叉树的神级方法【★★★★★】

    [问题]介绍一种时间复杂度O(N),额外空间复杂度O(1)的二叉树的遍历方式,N为二叉树的节点个数无论是递归还是非递归,避免不了额外空间为O(h),h 为二叉树的高度使用morris遍历,即利用空节点 ...

  9. [程序员代码面试指南]二叉树问题-在二叉树中找到两个节点的最近公共祖先、[LeetCode]235. 二叉搜索树的最近公共祖先(BST)(非递归)

    题目 题解 法一: 按照递归的思维去想: 递归终止条件 递归 返回值 1 如果p.q都不在root为根节点的子树中,返回null 2 如果p.q其中之一在root为根节点的子树中,返回该节点 3 如果 ...

随机推荐

  1. java 根据生日计算年龄 Java问题通用解决代码

    根据生日计算年龄可以通过Calendar实现.最简单可以考虑get(Calendar.DAY_OF_YEAR)来简单修正年龄,但是遇到生日在闰年的2月29之后,或者今年是闰年的2月29之后可能出现计算 ...

  2. 多trac的安装和配置

    其他相关网页: trac+svn: http://wenku.baidu.com/view/84389a81ec3a87c24028c43f.html apache(GCI):http://hi.ba ...

  3. Git常用统计命令

    上周要做个汇报PPT涉及到个人对项目贡献量,在网上搜集了些常用统计命令,总结如下: 1.统计代码提交量(包括添加.删除): git log --author="$(gitconfig--ge ...

  4. shader之旅-7-平面阴影(planar shadow)

    根据<real-time shadow>这本书第二章中的推导,实现了最简单的阴影技术. planar shadow通过一个投影矩阵将被灯光照射的物体的顶点沿着光线方向投影到接受阴影的平面. ...

  5. JAVA、Android与Cordova环境搭建

    一些坑(如Manager.exe闪退的问题)请查看:https://www.cnblogs.com/CyLee/p/9911195.html 官方网址: # Cordova http://cordov ...

  6. linux sublime python

    (三)配置python3编译环境 1.点击上部菜单栏Tools->Build System ->new Build System 2.点击之后,会出现一个空的配置文件,此时,往这个空配置文 ...

  7. poj 2762 Going from u to v or from v to u?(强连通、缩点、拓扑)

    题意:(理解错了)在一个洞穴中有多个room,要求任意选两个room:u.v,都能保证u.v之间有通路,注意洞穴中的路是有向边.. 分析:强连通子图中的点必然两两之间可以互通,两个强连通子图之间有通路 ...

  8. lua学习笔记(十)

      模块与包  使用require加载模块     一个规范的模块应该返回一个table作为这个模块所有导出功能的集合     lua里没通过任何强制性语法规则要求创建模块时反回一个table     ...

  9. java 原生定时执行程序(ScheduledExecutorService)

    package ThreadPoolTest; import java.util.Date; import java.util.concurrent.*; public class Main { pu ...

  10. 2018年EI收录中文期刊目录【转】

    [转]2018年EI收录中文期刊目录 Elsevier官网于2018年1月1日更新了EI Compendex目录,共收录中文期刊158种,其中新增期刊5种. 序号 中文刊名 收录情况 1 声学学报 保 ...