当前位置: 首页 > news >正文

面试算法21:删除倒数第k个节点

题目

如果给定一个链表,请问如何删除链表中的倒数第k个节点?假设链表中节点的总数为n,那么1≤k≤n。要求只能遍历链表一次。
例如,输入图4.1(a)中的链表,删除倒数第2个节点之后的链表如图4.1(b)所示。
在这里插入图片描述

分析

题目要求只能遍历链表一次。为了实现只遍历链表一次就能找到倒数第k+1个节点,可以定义两个指针。第1个指针P1从链表的头节点开始向前走k步,第2个指针P2保持不动;从第k+1步开始指针P2也从链表的头节点开始和指针P1以相同的速度遍历。由于两个指针的距离始终保持为k,当指针P1指向链表的尾节点时指针P2正好指向倒数第k+1个节点。
在这里插入图片描述

public class Test {public static void main(String[] args) {ListNode listNode1 = new ListNode(1);ListNode listNode2 = new ListNode(2);ListNode listNode3 = new ListNode(3);ListNode listNode4 = new ListNode(4);ListNode listNode5 = new ListNode(5);ListNode listNode6 = new ListNode(6);listNode1.next = listNode2;listNode2.next = listNode3;listNode3.next = listNode4;listNode4.next = listNode5;listNode5.next = listNode6;ListNode result = removeNthFromEnd(listNode1, 2);while (result != null) {System.out.println(result.val);result = result.next;}}public static ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(0);dummy.next = head;ListNode front = head, back = dummy;for (int i = 0; i < n; i++) {front = front.next;}while (front != null) {front = front.next;back = back.next;}back.next = back.next.next;return dummy.next;}
}
http://www.lryc.cn/news/185217.html

相关文章:

  • 数据结构——排序算法(C语言)
  • 基于Http Basic Authentication的接口
  • 【yaml文件的编写】
  • kt6368A双模蓝牙芯片无法透传 可能是什么问题呢
  • SpringBoot终极讲义第二章笔记
  • 【C++面向对象侯捷下】4. pointer-like classes,关于智能指针 | 5. function-like classes,所谓仿函数
  • 社科院与杜兰大学能源管理硕士项目——惊喜会随时间慢慢酝酿而出
  • Array简介
  • Django的模版使用(Django-03)
  • 详解分布式搜索技术之elasticsearch
  • 系统架构设计:3 软件架构建模技术与应用
  • JAVA在线电子病历编辑器源码 B/S架构
  • TS中的枚举是什么如何使用
  • UG\NX二次开发 重命名特征对象 UF_OBJ_set_name
  • 低欲望社会:只要我没欲望,世界就对我束手无策?
  • 抢红包设计
  • k8s集群-6(daemonset job cronjob控制器)
  • Compose 编译器版本和Kotlin版本对应关系
  • vite+vue+cesium
  • tcp滑动窗口原理
  • 3.4 Android bpfloader初始化流程解读(二)
  • Linux0.12内核源码解读(2)-Bootsect.S
  • 虚拟环境搭建、后台项目创建及目录调整、封装logger、封装全局异常、封装Response、后台数据库创建
  • 每日一练 | 网络工程师软考真题Day39
  • Android Studio编写xml布局不提示控件的部分属性问题的解决
  • BUGKU-simple_SSTI_1漏洞注入
  • Python:dict
  • git和svn 的国内的下载地址
  • matplotlib制图进阶版
  • 【Java 进阶篇】HTML介绍与软件架构相关知识详解