给定链表的表头节点head,实现删除链表的中间节点的函数

推展: 给定链表的头节点,整数a 和 整数 b,实现删除a/b处节点的函数

先来分析原问题,

长度1  直接返回

长度2 将头节点删除

长度3 删除第二个  长度4 删除第二个  长度5 删除第三个。。。。。。长度每增加2 删除的节点就向后移动一个节点

如果要删除一个节点,则需要找到待删除节点的前一个节点

package TT;

public class Test87 {

	public class Node{
public int value;
public Node next; public Node(int data){
this.value = data;
}
} public static Node removeMidNode(Node head){
if(head==null || head.next == null){
return head;
}
if(head.next.next == null){
return head.next;
}
Node pre = head;
Node cur = head.next.next;
while(cur.next !=null & cur.next.next != null){
pre=pre.next;
cur=cur.next.next;
}
pre.next = pre.next.next;
return head; } }

  

公式的套用计算 double r = ((double)(a*n))/((double)b)    n代表链表长度   向上取整就ok   然后计算删除第几个节点 找到需要删除节点的前一个节点即可

package TT;

import TT.Test85.Node;

public class Test87 {

    public Node removeByratio(Node head, int a, int b){

        if(a<1 |a >b){
return head; //不删除任何节点
}
int n = 0;
Node cur = head;
while(cur !=null ){
n++; //计数
cur = cur.next;
}
n = (int) Math.ceil(((double)(a*n))/(double)b);
if(n==1){
head = head.next;
}
if(n>1){
cur = head;
while(--n != 1){
cur = cur.next;
}
cur.next = cur.next.next;
}
return head;
} }

算法总结之 删除链表的中间节点和a/b处的节点(链表中间节点的重要思想)的更多相关文章

  1. 删除链表的中间节点和a/b处节点

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

  2. javascript数据结构与算法---二叉树(删除节点)

    javascript数据结构与算法---二叉树(删除节点) function Node(data,left,right) { this.data = data; this.left = left; t ...

  3. 《程序员代码面试指南》第二章 链表问题 删除中间节点和a/b处节点

    题目 例如 1-2-3-4 删除2,1-2-3-4-5 删除3 例如 a=1,b =2 java代码 /** * @Description:删除中间节点和a/b处节点 * @Author: lizho ...

  4. 删除链表的中间节点和a/b处的节点

    问题描述: 删除链表的中间节点和a/b处的节点 给定链表的头结点head,实现删除链表的中间节点的函数: 例如: 不删除任何节点: 1-->2,删除节点1: 1-->2-->3,删除 ...

  5. 链表问题----删除链表的中间节点和a/b处的节点

    删除链表的中间节点和a/b处的节点 对于给定一个链表的头节点head,实现删除链表的中间节点的函数. 例如 不删除任何节点: 1->2,删除节点1 1->2->3,删除节点2 1-& ...

  6. 数据结构&算法(一)_堆、栈(堆栈)、队列、链表

    堆: ①堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值: ·堆总是一棵完全二叉树.将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做 ...

  7. 数据结构(1) 第一天 算法时间复杂度、线性表介绍、动态数组搭建(仿Vector)、单向链表搭建、企业链表思路

    01 数据结构基本概念_大O表示法 无论n是多少都执行三个具体步骤 执行了12步 O(12)=>O(1) O(n) log 2 N = log c N / log c N (相当于两个对数进行了 ...

  8. 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】

    U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...

  9. leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表

    24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...

随机推荐

  1. 汇编 DOS的中断调用 INT 21H

    DOS系统功能调用 这个汇编指令是用于提供DOS系统功能调用. 它是由DOS提供的一组实现特殊功能的子程序供程序猿在编写自己的程序时调用,以减轻编程的工作量. 分两种,re=view"> ...

  2. 7、easyui 表单

    这是最后一个小节了,后面将会使用一个小项目来进一步实用讲解: 在之前的什么相关只是点都以及讲过了或者说涉及到过,如datagrid表格,树形菜单,布局面板panel,页签,拖放功能,只是在表格的属性细 ...

  3. 6、easyUI-拖放事件及应用

    一.EasyUI 基本的拖动和放置 直接代码看: <!doctype html> <html> <head> <meta http-equiv="C ...

  4. 从网上搜索到的一些关于pcap源代码,入门级的

    /*pcap_1.c*/ #include <stdio.h>#include <stdlib.h>#include <pcap.h>  /* 如果没有pcap的系 ...

  5. JS中的this变量的使用介绍

    在JavaScript中this变量是一个令人难以摸清的关键字,this可谓是非常强大,在本文将为大家详细介绍下JavaScript中this的使用,感兴趣的朋友可以参考下. JavaScript中t ...

  6. Token bucket

    w https://en.wikipedia.org/wiki/Token_bucket

  7. python系列十四:Python3 文件

    #!/usr/bin/python #Python3 文件 from urllib import requestimport pprint,pickle'''读和写文件open() 将会返回一个 fi ...

  8. CSS3边框border-radius

    一.官方解释 设置或检索对象使用圆角边框.提供2个参数,2个参数以“/”分隔,每个参数允许设置1~4个参数值,第1个参数表示水平半径,第2个参数表示垂直半径,如第2个参数省略,则默认等于第1个参数. ...

  9. Android:日常学习笔记(8)———开发微信聊天界面

    Android:日常学习笔记(8)———开发微信聊天界面 只做Nine-Patch图片 Nine-Patch是一种被特殊处理过的PNG图片,能够指定哪些区域可以被拉升,哪些区域不可以.

  10. docker 命令添加容器数据卷

    实现宿主机和容器的数据共享 只要建立连接,即使容器exit,主机的修改仍能提现到容器