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

  

  对于给定一个链表的头节点head,实现删除链表的中间节点的函数。

  例如

  不删除任何节点;

  1->2,删除节点1

  1->2->3,删除节点2

  1->2->3->4,删除节点2

  1->2->3->4->5,删除节点3

  如果将本问题复杂一下,给定链表的头节点head、整数a和整数b,实现删除位于a/b处节点的函数。

  例如

  链表:1->2->3->4->5,假设 a/b 的值为r

  如果 r 等于0,不删除任何节点

  如果 r 在区间(0,1/5]上,删除节点 1

  如果 r 在区间(1/5,2/5]上,删除节点 2

  如果 r 在区间(2/5,3/5]上,删除节点 3

  如果 r 在区间(3/5,4/5]上,删除节点 4

  如果 r 在区间(4/5,1]上,删除节点 5

  如果 r 大于1,不删除任何节点

  

package com.test;

import com.tset.ListNode;

/**
* Created by Demrystv.
*/
public class RemoveListNode { // 针对普通问题,采用的方法是找规律,当元素个数大于3时,链表长度每增加2,要删除的节点就要后移一个节点
public ListNode removeMiddle(ListNode head){ // 针对的是没有元素或者只有一个元素
if (head == null || head.next == null){
return null;
} // 针对的是只有两个元素
if (head.next.next == null){
return head.next;
} // 针对的是三个及三个以上元素,这时符合规律
ListNode pre = head;
ListNode cur = head.next.next;
while (pre.next != null && cur.next.next != null){
pre = pre.next;
cur = cur.next.next;
}
pre.next = pre.next.next;
return head;
} // 针对进阶问题,主要是找到n,即要删除的元素的位置
public ListNode removeByRatio(ListNode head, int a ,int b){
if (a < 1 || a > b){
return head;
} // 求链表的长度
int n = 0;
ListNode cur = head;
while (cur != null){
n++;
cur = cur.next;
} // n表示要删除的节点是第几个节点,可以举例证明,也可以通过举例来推导
n = (int) Math.ceil((double)(a * n) / (double) b); // 其原理类似于删除倒数第K 个节点
if (n == 1){
return head.next;
}
if (n > 1){
cur = head;
while (--n != 0){
cur = cur.next;
}
cur.next = cur.next.next;
}
return head;
} }

 

链表问题----删除链表的中间节点和a/b处的节点的更多相关文章

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

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

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

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

  3. 算法总结之 删除链表的中间节点和a/b处的节点(链表中间节点的重要思想)

    给定链表的表头节点head,实现删除链表的中间节点的函数 推展: 给定链表的头节点,整数a 和 整数 b,实现删除a/b处节点的函数 先来分析原问题, 长度1  直接返回 长度2 将头节点删除 长度3 ...

  4. 第18题:在O(1)时间删除链表结点+删除链表中重复的节点

    题目描述:题目描述在O(1)时间删除链表结点 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 考查创新编程能力. 思路: 1.如果从头到尾遍历,时间O(n) 2.如果将待删 ...

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

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

  6. [剑指offer]6.从尾到头打印链表+18.删除链表节点

    链表 6.从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 方法一 迭代 创建空列表res,将链表值head.val依次存进res,返回翻转后的res 代码 cl ...

  7. 19. [链表][双指针]删除链表的倒数第N个节点

    19. 删除链表的倒数第N个节点 方法一:哨兵节点+快慢指针 在本题中,快慢指针的用法为:让快指针先走几步,步数由 \(n\) 决定. 使用哨兵节点的理由是为了避免删除节点为头结点引发的空指针异常. ...

  8. 链表:删除链表中重复的结点(java实现)

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  9. leetcode-19:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

    /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * Lis ...

随机推荐

  1. http各个版本(1/1.1/2)对比

    参考的文章: 从理论到实践 全面理解HTTP/2 HTTP协议以及HTTP2.0/1.1/1.0区别 综合阐述http1.0/1.1/2和https 目录: http1.1 长连接 HTTP 1.1支 ...

  2. 基于 React 实现一个 Transition 过渡动画组件

    过渡动画使 UI 更富有表现力并且易于使用.如何使用 React 快速的实现一个 Transition 过渡动画组件? 基本实现 实现一个基础的 CSS 过渡动画组件,通过切换 CSS 样式实现简单的 ...

  3. linux入门系列15--文件传输之vsftp服务

    前面的系列文章基本讲完了linux管理相关的基础知识,从本篇开始讲解centos7中服务程序的部署和配置,以便为外部提供各种服务. 日常工作和娱乐中,我们所需的各种资源都离不开网络以及各种服务,我们通 ...

  4. Pythone是什么鬼?

    认识 Python 人生苦短,我用 Python -- Life is short, you need Python 目标 Python 的起源 为什么要用 Python? Python 的特点 Py ...

  5. com.google.gson json字符串的序列化与反序列化

    经常做协议的时候用到json,个人习惯是定义协议文档,很少在这中场景中定义类,使用对象. 这里使用一个人物有名字,性别,有一个物品列表做个简单示例记录. 序列化 JsonObject jo=new J ...

  6. 在阿里云服务器上安装mysql及重置密码

    参考链接:https://www.cnblogs.com/ljysy/p/10324854.html 下载与安装MySQL: 这里采用Yum管理好了各种rpm包的依赖,能够从指定的服务器自动下载RPM ...

  7. redis深入学习

    Redis持久化 官方文档: https://redis.io/topics/persistence 1.RDB和AOF优缺点 RDB: 可以在指定的时间间隔内生成数据集的时间点快照,把当前内存里的状 ...

  8. 第3章 关系数据库标准语言SQL(重点) | 数据库知识点整理

    第3章 关系数据库标准语言SQL(重点) 了解 SQL语言发展过程 关系数据库技术和关系数据库管理系统RDBMS产品的发展过程 掌握 SQL语言的特点和优点 面向过程的语言和SQL语言的区别 关系数据 ...

  9. Selenium实战(一)——浏览器实例

    一.Chrome浏览器 首先,在所有的打开浏览器操作之前,要配置好python环境和selenium,安装好如下图所示:然后可以选择一款适合自己的编辑器,这里用的是pycharm(第一次写博客贴的动图 ...

  10. C++ 与String有关的函数!!!

    String函数 1.字符串的输入 (1) string s; cin >> s;//碰到空格等分隔符会终端输入 /* string s; cin >> s;//如果输入 he ...