题目描述

给定一个编码链表和一个加密条件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个元素相关推荐

  1. 华为OD机试真题2023(JavaScript)

    华为机试题库已由2022版换为2023版   华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100分,第三道为中等或困难题,分值为200分.总分为400分,150分钟考试时间.之前通过为1 ...

  2. 【华为机试真题 Python实现】2022年4、5月高频机试题

    文章目录 2022年4.5月高频机试题 机试必须要会的函数 输入输出处理 for 循环 通过下标访问元素 直接迭代访问元素 同时访问下标和元素 while 循环 字符ASSIC码转换 进制转换 绝对值 ...

  3. 【华为机试真题 Python实现】2022年4季度最新机试题

    文章目录 2022年4季度最新机试题 机试必须要会的函数 输入输出处理 for 循环 通过下标访问元素 直接迭代访问元素 同时访问下标和元素 while 循环 字符ASSIC码转换 进制转换 绝对值计 ...

  4. 华为OD机试真题 Java 实现【二维伞的雨滴效应】【2023 B卷 100分】,附详细解题思路

    目录 一.题目描述 二.输入描述 三.输出描述 四.解题思路 五.Java算法源码 六.效果展示 1.输入 2.输出 3.说明 大家好,我是哪吒. 做技术,我是认真的,立志于打造最权威的华为OD机试真 ...

  5. 二叉排序树[2005年华中科技大学计算机保研机试真题]

    题目描述: 输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历. 输入: 输入第一行包括一个整数n(1<=n<=100). 接下来的一行包括n个整数. 输出: 可能有多组测试数据, ...

  6. 华为OD机试真题大全完整目录

    华为OD机试真题大全完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:华为OD机试真题大全 数量:406篇博文(2023年5月16日截止) 更新时间至:2023年5月16日(后续加上去的博文,会每 ...

  7. 清华机试真题:成绩排序

    清华大学机试真题:成绩排序 题目描述 输入描述: 输出描述: 示例1 代码块 题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前 ...

  8. 【满分】【华为OD机试真题2023 JAVAJS】查找充电设备组合

    华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 查找充电设备组合 时间限制:5s 空间限制:256MB 限定语言:不限 题目描述: 某个充电站,可提供n个充电设备,每个充电设备均有对应的 ...

  9. 【华为机试真题 Python实现】查找众数及中位数

    文章目录 前言 题目描述 示例 1 示例 2 参考代码 前言 <华为机试真题>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果您在准备华为的面试,期间有想了解的可以私信我,我会 ...

最新文章

  1. python写一个系统-使用Python写一个量化股票提醒系统
  2. 恢复脚本(导入数据库)
  3. java jdbc url编码_java中jdbc/sql出现编码问题
  4. matlab平面问题编程,有限元平面矩形单元MATLAB程序设计.docx
  5. 学生电脑哪个牌子好_常亮补光灯哪个牌子好服务至上
  6. 注入双括号报错注入_SQL手动注入:sqlilabs(less110)
  7. html隐藏层点击显示不出来,[js+css]点击隐藏层,点击另外层不能隐藏原层
  8. 算法题存档20190304
  9. EFLAGS 寄存器,EFLAGS 交叉引用,EFLGAS条件码
  10. 你们投资在p2p的钱都怎么样了?
  11. 通过一个用户管理实例学习路由react-router-dom知识
  12. IE11浏览器清除cookie
  13. js事件冒泡与事件捕获、阻止事件冒泡和浏览器默认行为
  14. StackStorm安装WebUI
  15. Referenced file contains errors (xml文件第一行小红叉错误)
  16. 高中信息技术python练习题_Python基础练习题5
  17. 库存系统难破题?且看京东到家如何破
  18. html 图片右侧空白,CSS缩小窗口时,背景图出现右侧空白
  19. 红米k30至尊纪念版和华为mate30pro哪个值得买
  20. 目前绝大多数处理语言先验性文章总结

热门文章

  1. 建立自己的GWT Spring Maven原型
  2. 全连接层 时间复杂度_神经网络全连接层(3)
  3. mysql(待完善)
  4. android activity 显示无焦点_Android面试题集锦之fragemnt
  5. 百分比单位始终根据父元素相应值来计算_CSS Viewport 单位,很多人还不知道使用它来快速布局!...
  6. 【TCP三次握手与四次挥手最强解析】
  7. 未定义与 struct 类型的输入参数相对应的函数 fetch_引入鲁棒性作为连续参数,这种新损失函数实现了自适应、随时变换...
  8. c语言如何查找字符串指定字符
  9. 如何使用C语言的面向对象?
  10. Facebook开源 C++11 组件库,真香!