《程序员代码面试指南》第二章 链表问题 删除中间节点和a/b处节点
题目
例如 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处节点的更多相关文章
- 程序员代码面试指南 IT名企算法与数据结构题目最优解
原文链接 这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮 ...
- 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...
- 《程序员代码面试指南》第三章 二叉树问题 遍历二叉树的神级方法 morris
题目 遍历二叉树的神级方法 morris java代码 package com.lizhouwei.chapter3; /** * @Description:遍历二叉树的神级方法 morris * @ ...
- [程序员代码面试指南]链表问题-将单链表的每k个节点之间逆序
题目描述 给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点. 题解 内部函数reverse实现链表beg到end的翻转 ...
- 左神算法书籍《程序员代码面试指南》——2_03删除链表的中间节点和a/b处的节点
[题目]给定链表的头节点head,实现删除链表的中间节点的函数.例如:不删除任何节点:1->2,删除节点1:1->2->3,删除节点2:1->2->3->4,删除节 ...
- 左神算法书籍《程序员代码面试指南》——2_02在单链表和双链表中删除倒数第k个字节
[题目]分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点.[要求]如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1).[题解]从头遍历链表, ...
- 程序员代码面试指南:IT名企算法与数据结构题目最优解
第1章栈和队列 1设计一个有getMin功能的栈(士★☆☆☆) 1由两个栈组成的队列(尉★★☆☆) 5如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 8猫狗队列(士★☆☆☆)10用一个栈实现另一 ...
- 左神算法书籍《程序员代码面试指南》——3_05Morris遍历二叉树的神级方法【★★★★★】
[问题]介绍一种时间复杂度O(N),额外空间复杂度O(1)的二叉树的遍历方式,N为二叉树的节点个数无论是递归还是非递归,避免不了额外空间为O(h),h 为二叉树的高度使用morris遍历,即利用空节点 ...
- [程序员代码面试指南]二叉树问题-在二叉树中找到两个节点的最近公共祖先、[LeetCode]235. 二叉搜索树的最近公共祖先(BST)(非递归)
题目 题解 法一: 按照递归的思维去想: 递归终止条件 递归 返回值 1 如果p.q都不在root为根节点的子树中,返回null 2 如果p.q其中之一在root为根节点的子树中,返回该节点 3 如果 ...
随机推荐
- rational rose画UML图
原文见:http://blog.csdn.net/cjr15233661143/article/details/8532997 UML是一种建模语言,是系统建模的标准.我们之所以建模是因为大规模的系统 ...
- 使用svn 在 github上下载单个文件夹?
事实上可以用svn checkout 下来的.(但就是速度不知道为啥那么慢) 第一步:输入你的仓库地址 第二步:选择thunk,然后仓库的内容尽收眼底.接下来就可以选择你想下载的任意文件夹了. (如果 ...
- oracle复合索引的选择和使用
声明:虽然题目是Oracle.但同样适合MySQL InnoDB索引 在大多数情况下.复合索引比单字段索引好 很多系统就是靠新建一些合适的复合索引.使效率大幅度提高 ...
- poj 2367
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3658 Accepted: 2433 ...
- sublime使用技巧(2)-- 实用插件推荐【持续更新】
1.Auto semicolon 在括号内输入分号,会自动把光标移到行尾然后再输入分号. 2.DocBlockr 补全注析格式,例如在函数上面输入/** + Enter,就会自动补全函数的注析说明. ...
- js判断对象的属性是原型的还是实例的
一些情况下,我们需要知道对象的属性是原型的还是实例的,如果看代码的话比较繁琐,下面讲解下如何可以直接判断 1.hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的 ...
- 移动端实用的meta标签
直接上代码,代码自有颜如玉 代码自有黄金屋啊 <meta http-equiv="Content-Type" content="text/html; charset ...
- 四边形不等式优化DP——石子合并问题 学习笔记
好方啊马上就要区域赛了连DP都不会QAQ 毛子青<动态规划算法的优化技巧>论文里面提到了一类问题:石子合并. n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的 ...
- vue2+element组件库开发
Vue2:https://cn.vuejs.org/v2/guide/single-file-components.html element组件库:http://element-cn.eleme.io ...
- VS2019取消git源代码管理
VS2019->工具->选项->源代码管理->插件管理 详见下图