linkedhashmap获取第n个元素_机试真题分享——交换链表前后第K个元素
题目描述
给定一个编码链表和一个加密条件K,对编码进行加密。
加密规则:把编码从前往后开始数第K个元素和从后往前数第K个元素进行交换。
注意:编码的长度为0.第一个编码的序号是1.
示例:
输入:
[1 2 3 4 5 6] 2
输出:
[1 5 3 4 2 6]
链表节点定义如下:
public class ListNode { int val; ListNode next;
ListNode(int x) { val = x; }}
解题思路
1.万能暴力法解决
2.先后指针法
参考代码
package com.lingluo;
import java.util.ArrayList;import java.util.List;
/** * @author 灵洛 * @date 2020/8/9 23:05 */public class SwapLinkList { /** * 万能暴力法(适用于在链表中插入/删除节点、反向输出链表、链表排序、翻转链表、合并链表等) * * 使用数组/线性表/map缓存链表节点信息,按照提意处理后再转回链表 * @param head * @param k * @return */ public static ListNode swap(ListNode head, int k) { ListNode root = head; List list = new ArrayList<>();while (head != null) { list.add(head.val); head = head.next; }//记录交换节点的位置及取值int leftIndex = k - 1;int rightIndex = list.size() - k;int leftVal = list.get(leftIndex);int rightVal = list.get(rightIndex);// 从第一个开始 ListNode start = root;while (start != null) {//找到正数第K个元素if (leftIndex == 0) { start.val = rightVal; }//找到倒数第K个元素if (rightIndex == 0) { start.val = leftVal; } start = start.next; leftIndex--; rightIndex--; }return root; }/** * 先后指针法(用来寻找链表中第K个节点) * 先发指针走K-1步,再让后发指针从头节点开始走 * 先发指针走到最后一个节点时,后发指针走到倒数第K个节点 * * @param head * @param k * @return */public static ListNode swapByPointer(ListNode head, int k) { ListNode earlier = head;// 先发指针先走K-1步for (int i = 0; i <= k - 1 ; i++) { earlier = earlier.next; }// 记录一下第K个位置的节点,用于后面的交换 ListNode mark1 = earlier; ListNode later = head;// 先后指针一起走,先发指针走到最后一个节点时,后发指针走到倒数第K个节点while (earlier != null) { earlier = earlier.next; later = later.next; }// 交换两个位置的值int mark2 = later.val; later.val = mark1.val; mark1.val = mark2;return head; }//打印public static void printLink(ListNode head) { ListNode curNode = head;while (curNode != null) { System.out.print(curNode.val + " "); curNode = curNode.next; } System.out.println(); }public static void main(String[] args) { ListNode node1 = new ListNode(1); ListNode node2 = new ListNode(2); ListNode node3 = new ListNode(3); ListNode node4 = new ListNode(4); ListNode node5 = new ListNode(5); node1.next = node2; node2.next = node3; node3.next = node4; node4.next = node5; printLink(node1); swap(node1, 2); printLink(node1); }}
linkedhashmap获取第n个元素_机试真题分享——交换链表前后第K个元素相关推荐
- 华为OD机试真题2023(JavaScript)
华为机试题库已由2022版换为2023版 华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分.总分为400分,150分钟考试时间.之前通过为1 ...
- 【华为机试真题 Python实现】2022年4、5月高频机试题
文章目录 2022年4.5月高频机试题 机试必须要会的函数 输入输出处理 for 循环 通过下标访问元素 直接迭代访问元素 同时访问下标和元素 while 循环 字符ASSIC码转换 进制转换 绝对值 ...
- 【华为机试真题 Python实现】2022年4季度最新机试题
文章目录 2022年4季度最新机试题 机试必须要会的函数 输入输出处理 for 循环 通过下标访问元素 直接迭代访问元素 同时访问下标和元素 while 循环 字符ASSIC码转换 进制转换 绝对值计 ...
- 华为OD机试真题 Java 实现【二维伞的雨滴效应】【2023 B卷 100分】,附详细解题思路
目录 一.题目描述 二.输入描述 三.输出描述 四.解题思路 五.Java算法源码 六.效果展示 1.输入 2.输出 3.说明 大家好,我是哪吒. 做技术,我是认真的,立志于打造最权威的华为OD机试真 ...
- 二叉排序树[2005年华中科技大学计算机保研机试真题]
题目描述: 输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历. 输入: 输入第一行包括一个整数n(1<=n<=100). 接下来的一行包括n个整数. 输出: 可能有多组测试数据, ...
- 华为OD机试真题大全完整目录
华为OD机试真题大全完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:华为OD机试真题大全 数量:406篇博文(2023年5月16日截止) 更新时间至:2023年5月16日(后续加上去的博文,会每 ...
- 清华机试真题:成绩排序
清华大学机试真题:成绩排序 题目描述 输入描述: 输出描述: 示例1 代码块 题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前 ...
- 【满分】【华为OD机试真题2023 JAVAJS】查找充电设备组合
华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 查找充电设备组合 时间限制:5s 空间限制:256MB 限定语言:不限 题目描述: 某个充电站,可提供n个充电设备,每个充电设备均有对应的 ...
- 【华为机试真题 Python实现】查找众数及中位数
文章目录 前言 题目描述 示例 1 示例 2 参考代码 前言 <华为机试真题>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果您在准备华为的面试,期间有想了解的可以私信我,我会 ...
最新文章
- python写一个系统-使用Python写一个量化股票提醒系统
- 恢复脚本(导入数据库)
- java jdbc url编码_java中jdbc/sql出现编码问题
- matlab平面问题编程,有限元平面矩形单元MATLAB程序设计.docx
- 学生电脑哪个牌子好_常亮补光灯哪个牌子好服务至上
- 注入双括号报错注入_SQL手动注入:sqlilabs(less110)
- html隐藏层点击显示不出来,[js+css]点击隐藏层,点击另外层不能隐藏原层
- 算法题存档20190304
- EFLAGS 寄存器,EFLAGS 交叉引用,EFLGAS条件码
- 你们投资在p2p的钱都怎么样了?
- 通过一个用户管理实例学习路由react-router-dom知识
- IE11浏览器清除cookie
- js事件冒泡与事件捕获、阻止事件冒泡和浏览器默认行为
- StackStorm安装WebUI
- Referenced file contains errors (xml文件第一行小红叉错误)
- 高中信息技术python练习题_Python基础练习题5
- 库存系统难破题?且看京东到家如何破
- html 图片右侧空白,CSS缩小窗口时,背景图出现右侧空白
- 红米k30至尊纪念版和华为mate30pro哪个值得买
- 目前绝大多数处理语言先验性文章总结
热门文章
- 建立自己的GWT Spring Maven原型
- 全连接层 时间复杂度_神经网络全连接层(3)
- mysql(待完善)
- android activity 显示无焦点_Android面试题集锦之fragemnt
- 百分比单位始终根据父元素相应值来计算_CSS Viewport 单位,很多人还不知道使用它来快速布局!...
- 【TCP三次握手与四次挥手最强解析】
- 未定义与 struct 类型的输入参数相对应的函数 fetch_引入鲁棒性作为连续参数,这种新损失函数实现了自适应、随时变换...
- c语言如何查找字符串指定字符
- 如何使用C语言的面向对象?
- Facebook开源 C++11 组件库,真香!