思路:
1、如果删除的节点不是尾节点,只需要把下一个节点的值复制到当前节点,然后当前节点指向下下个节点即可

2、如果删除的是尾节点,

  • 链表只有一个元素,直接删除即可;
  • 遍历找到尾节点的前一个节点,把此节点的next指向null即可

代码:

package com.datastructure.link;/*** o(1) 时间内删除链表节点*/
public class RemoveNodeInLink {static class Node {int value;Node next;public Node(int value) {this.value = value;}// 便于打印不能作用与循环链表@Overridepublic String toString() {if (this.next == null) {return String.valueOf(this.value);}return this.value + "->" + this.next.toString();}}/*** o(n)时间 删除节点 按照索引位置删除节点* * * @return 返回新的链表(新链表,头结点引用)* */public static Node removeNode(Node head, int index) {if (head == null || index < 0) {throw new RuntimeException("Invalid param");}if (index == 0) {return head.next;}Node preNode = head;Node curNode = head.next;int count = 1;while (curNode != null) {if (count == index) {preNode.next = curNode.next;break;}count++;preNode = preNode.next;curNode = curNode.next;}return head;}/*** o(1) 删除指定元素 */public static Node removeNode(Node head, Node toRemove) {if (head == null || toRemove == null) {return head;}// 非尾节点if (toRemove.next != null) {Node toRemoveNext = toRemove.next;toRemove.value = toRemoveNext.value;toRemove.next = toRemoveNext.next;return head;// 尾节点   }else {// 头节点即是尾节点if (head == toRemove) {return null;}// 找到尾节点的前一个节点Node tmp = head;// 或者// while (tmp.next != null && tmp.next.next != null)while (tmp.next != toRemove) {tmp = tmp.next;}tmp.next = null;return head;}}public static void main(String args[]) {Node head = createTestLinkedList(5, null);// 原链表System.out.println("origin link: " + head);// 删除第二个元素后System.out.println("remove third node: " + removeNode(head, 2));// 删除第二个元素后System.out.println("remove third node: " + removeNode(head, 2));Node toRemove = head.next.next;// 删除第三个元素System.out.println("remove third node: " + removeNode(head, toRemove));Node toRemove1 = head.next;// 删除第二个元素System.out.println("remove second node: " + removeNode(head, toRemove1));Node toRemoveHead = head;// 删除第一个元素System.out.println("remove first node: " + removeNode(head, toRemoveHead));}private static Node createTestLinkedList(int n, Node addNode) {Node head = new Node(0);Node curNode = head;for (int i = 1; i < n; i++) {curNode.next = new Node(i);curNode = curNode.next;}curNode.next = addNode;return head;}}

单链表之o(1)删除指定节点(Java)相关推荐

  1. python 链表倒数第k个节点_链表-删除单链表中倒数第k个节点

    题目 实现一个函数,一个可以删除单链表中倒数第k个节点 难度 简单 分析 本题比较简单,实现方法多种多样,这里提供一种方法 首先明确一点,在单链表中删除倒数第k个节点,需要找到他的前一个节点,让前一个 ...

  2. Java数据结构与算法———(8)单链表应用实例,删除节点,根据输入的整数

    在单链表中,根据输入的节点编号删除对应的节点 一.代码 import java.util.Scanner;public class SingleLinkedListDemo {public stati ...

  3. 单链表的创建、删除、反转、插入、排序操作

    单链表的创建.删除.反转.插入.排序操作 文章目录 单链表的创建.删除.反转.插入.排序操作 1.1 链表引言 1.2 单链表节点的数据结构 1.3 创建链表 1.4 打印整个链表 1.5 链表插入数 ...

  4. 使用OC实现单链表:创建、删除、插入、查询、遍历、反转、合并、判断相交、求成环入口...

    一.概念 链表和数组都是一种线性结构,数组有序存储的,链表是无序存储的. 数组中的每一个元素地址是递增或者递减的关系,链表的每一个节点的地址没有此规律,它们是通过指针的指向连接起来. 链表种类:单链表 ...

  5. Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点

    找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...

  6. 【小f的刷题笔记】(JS)链表 - 单链表的倒数第 k 个节点 LeetCode19 单链表的中点 LeetCode876

    [链表] 一.单链表的倒数第 k 个节点: ✔ 要求:只遍历一遍,链表有多长未知 LeetCode19 链接: 19.删除链表的倒数第N个结点 题目: 思路: 因为没有给头结点,我们就先定义一个哑结点 ...

  7. 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...

  8. 单链表基本操作的实现——删除

    一. 按值删除元素 //删除 void DeleteElem(LinkList &L, ElemType e) {LinkList p = L;//p指向头结点LinkList q = NUL ...

  9. Jquery删除指定节点下的所有元素

    Jquery删除指定节点下的所有元素 在使用jquery编写网页的时候最常用的删除节点的方法包括三种: $(selector).remove():remove方法会删除被选元素(即selector), ...

最新文章

  1. 使用pytorch建立LSTM神经网络训练识别手写数字
  2. 装机人员工具 - imsoft.cnblogs
  3. 通用权限实现的核心设计思想
  4. 怎样将1900-01-00变成-_《转生成蜘蛛又怎样》第2集预告:人类到来,蜘蛛子遭遇大危机...
  5. ASP.Net服务性能优化原则
  6. P1272 重建道路
  7. pytorch保存模型运行时状态,记录点checkpoint
  8. Spring源码分析之doDispatch分发请求逻辑
  9. html动态留言墙代码,JavaScript实现动态留言板
  10. 计算机应用基础试题及答案东师,计算机应用基础试题及答案东师
  11. 台式计算机 无线已连接 无法上网,WiFi已连接不可上网怎么办
  12. FAT 文件系统代码分析--文件系统挂载篇
  13. 基于光流和RNN的长视频微表情检测
  14. 彻悟人生555句金玉良言
  15. 【acwing 寒假每日一题(入门组)】day20 火星人
  16. Abbirb120型工业机器人_abb IRB120资料的具体介绍
  17. WebGL简易教程——目录
  18. 考研二战失败 我的从零开始Java入门学习(十)
  19. 数据分析技术:结构方程模型;想要“追求”,了解是第一步
  20. 动力传动系统仿真测试解决方案

热门文章

  1. Three.js--》实现3D汽车展厅效果展示
  2. [转]制作人矢野透露《应援团2》最新消息
  3. 服务器系统能耗,服务器能耗怎么计算
  4. 智慧园区能耗监测系统
  5. spark把kafka数据写到hive
  6. java爬取网页数据_Python网络爬虫实战(二)数据解析
  7. Java Runtime (class file version 55.0), this version of the Java Runt
  8. 2018年CMA考试难度大不大?
  9. python偷回灭霸的宝石_Python+PyQt5实现灭霸响指功能
  10. 基于H5和C3的静态电商网站