linkedhashmap获取第n个元素_机试真题分享——交换链表前后第K个元素

2aa9e80d14dc8a4ac7368f403cd9d91d.gif

题目描述

给定一个编码链表和一个加密条件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);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven java 参数_将Maven参数注入Java类

我想将settings.xml配置文件参数注入Java类.我尝试使用maven-annotation-plugin,但值为null.我想知道这是不是因为这个插件是为Mojo设计的Setting.xml片段APP_NAMEUSER_EMAILUSER_PASSWORD在班上Parameter(defaultValue "test.email", readonly true)private Strin…

Spring Boot Admin –用于管理Spring Boot应用程序的Admin UI

作为微服务开发的一部分&#xff0c;我们许多人都将Spring Boot与Spring Cloud功能一起使用。 在微服务领域&#xff0c;我们将有许多Spring Boot应用程序将在相同/不同的主机上运行。 如果将Spring Actuator添加到Spring Boot应用程序中&#xff0c;我们将获得很多现成的端点来…

md5与des算法有何不同_Python算法详解:为什么说算法是程序的灵魂?

算法是程序的灵魂,只有掌握了算法,才能轻松地驾驭程序开发。软件开发工作不是按部就班,而是选择一种最合理的算法去实现项目功能。算法能够引导开发者在面对一个项目功能时用什么思路去实现,有了这个思路后,编程工作只需要遭循这个思路去实现即可。本章将详细讲解计算机算法的基…

java json 解析null_解析包含null的原始json数组

Json数组遇新是直朋能到&#xff1a;{"userName":null," msgArr":[null],"numrow":0} //String resultGson&#xff1a;new Gson().fromJson(result, MyClass.class);MyCl作一新求抖直微圈ass:public String userName;public int[] msgArr;...错…

python运维脚本部署jdk_基于Java/Python搭建Web UI自动化环境

Java搭建UI自动化测试环境下载JDK8https://www.cnblogs.com/thloveyl/p/12378124.html配置Java环境1.解压Jdk压缩包2.配置环境变量计算机->属性->高级->环境变量->系统变量->Path3.添加根目录下的bin与lib目录、jre下的bin目录(近期我发现只将bin目录加入Path就…

eclipse JAVA用户注册_如何eclipse编写一个简单实用的登陆界面

花了点时间写了一个简单的页面&#xff1a;package test;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class UserInterface extends JFrame implements WindowListener{JFrame jf;JPanel jpan1,jpan2,jpan3;JLabel username,password,lspace;JText…

java内存泄漏案例_寻找内存泄漏:一个案例研究

java内存泄漏案例一周前&#xff0c;我被要求修复一个有内存泄漏问题的webapp。 考虑到过去两年左右的时间里我已经看到并修复了数百个泄漏&#xff0c;我想这有多难。 但是事实证明这是一个挑战。 12小时后&#xff0c;我发现该应用程序中不少于5个漏洞&#xff0c;并设法修复…

doc无法编译java文件_java编译成jar文件.doc

java编译成jar文件Java程序打包成jar包(2012-06-08 10:28:23)转载▼标签&#xff1a;分类&#xff1a; 方法一&#xff1a;通过jar命令jar命令的用法&#xff1a;下面是jar命令的帮助说明&#xff1a;用法&#xff1a;jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-p…

python 档案管理系统_Python 写入档案的 4 个方法

在 Python 写入档案内容跟读取档案差不多, 也很简单方便&#xff0c;以下会介绍用 Python 逐行读取档案内容的 4 种方法。在看例子前先要了解开启档案的参数, 一般上读取档案会用 “r”, 即唯读的意思, 如果要写入档案, 分别可以用 “w” (即 write 的意思) 或 “a” (即 appen…

高可用性(HA),会话复制,多VM Payara群集

抽象 在研究如何创建高可用性&#xff08;HA&#xff09;时&#xff0c;我发现了会话复制的多机Payara / GlassFish群集&#xff0c;无法在一个参考中找到所需的一切。 我认为这将是一个普遍的需求并且很容易找到。 不幸的是&#xff0c;我的假设是错误的。 因此&#xff0c;本…

java时间日期工具类_java日期处理工具类

java日期处理工具类import java.text.DecimalFormat;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;import java.util.Random;import java…

python运行结果闪退_Pyhton TestCase运行闪退与失败,原因不详。。。

把源码贴上来&#xff0c;希望某位大神可以指点迷津&#xff1a;"""Unit test for odbchelper.pyThis program is part of "Dive Into Python", a free Python book forexperienced programmers. Visit http://diveintopython.org/ for thelatest ver…

java.jsp.jdbc_Java-jsp使用JDBC访问数据库时显示乱码是怎么回事?

1.JSP页面编码你改成utf-8;2.servlet容器的编码格式你改成utf-8;以tomcat为例&#xff1a;找到你的安装目录tomcat下面 > conf > server.xml用记事本打开添加如下的代码&#xff1a;URIEncoding"utf-8"protocol"HTTP/1.1"port"8080"connec…

python实例讲解wxpythonhyh123_Python实例讲解 -- wxpython 基本的控件 (按钮)

使用按钮工作在wxPython 中有很多不同类型的按钮。这一节&#xff0c;我们将讨论文本按钮、位图按钮、开关按钮(toggle buttons )和通用(generic )按钮。如何生成一个按钮&#xff1f;在第一部分(part 1)中&#xff0c;我们已经说明了几个按钮的例子&#xff0c;所以这里我们只…

检测Java Web应用程序而无需修改其源代码

与其他系统进行交互时&#xff0c;大多数Java Web应用程序都使用标准Java接口。 使用接口javax.servlet.Servlet来实现基于HTTP的服务&#xff0c;例如网页或REST服务器。 使用JDBC接口java.sql.Statement和java.sql.Connection实现数据库交互。 这些标准几乎是通用的&#xff…

如何快速弄懂一个新模型_如何评估创业项目是否靠谱?一个新的模型 | 创创锦囊...

要判断一个创业项目是否靠谱&#xff0c;是否能拥有广阔的市场和巨大的增长潜力&#xff0c;不仅是投资人关心的话题&#xff0c;更是每一个创业者在创业过程中不断思考的问题。投资人关注大趋势、大机会&#xff0c;遵循自上而下的思维模型&#xff0c;在心仪的赛道上寻找合适…

java编译找不到符号 int age=in.nexint()_Java报错找不到符号,小白自学求大佬解决...

import java.util.*;public class guess_1{public static void main(String[] args){Scanner innew Scanner(System.in);System.out.println("--------猜拳游戏--------");System.out.println("请出拳(1.剪刀 2.石头 3.布)");int personin.nextInt();int c…

Java命令行界面(第24部分):MarkUtils-CLI

本系列中有关使用Java解析命令行参数的第一篇文章介绍了Apache Commons CLI库。 这是本系列中介绍的基于Java的命令行解析库中最古老的&#xff0c;而且可能是最常用的之一。 Apache Commons CLI确实显示了它的时代&#xff0c;特别是与一些更现代的基于Java的命令行处理库相比…

view如何接受json_如何将你的 ThinkJS 项目部署到 ZEIT 上

编者按&#xff1a;本文作者奇舞团前端开发工程师李喆明。什么是 ZEITZEIT(https://zeit.co) 是免费的云平台&#xff0c;支持部署静态网站以及 Serverless 函数。Serverless 是近几年比较火的概念&#xff0c;简单去理解就是你只需要去实现具体的业务逻辑&#xff0c;而与最终…

python 小爱音箱集成_python控制小爱音箱自定义设备开关_修仙教程_小爱同学

send send_to_login(ipport,cookie,start_time,end_time)def play(): name info,播放 message_json {"action":"play","media":"app_ios"} path mediaplayer method player_play_operation send.sned_to_cmd(message_json,path,me…