首页 > 编程语言 >java反转部分链表后记

java反转部分链表后记

时间:2023-05-02 14:23:10浏览次数:44  
标签:head ListNode val int next 链表 后记 java

由于链表只是一个单向链表
所以不能在一次循环之内就直接进行反转操作
又因为只需要反转部分链表
所以只要将链表遍历到需要反转的最后一位,剩下的不用管了
于是我想到了在第一遍循环中用HashMap获取需要反转的链表的部分,键代表下标,值代表原先链表中val
之后第二遍遍历时按照将值按照反向数据即可
Tips:
1.值得注意的是,假如用的for循环遍历,想要获取m和n的值(也就是指定的链表部分时),由于默认的i是等于零的,所以范围要取m-1到n,或者将默认的i进行更改
2.一定一定要先定义一个临时ListNode类型的对象来指代原链表,不然会毁坏原有链表,导致返回值错误,一切对于链表的遍历和val的更改都是对于临时对象而言的

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     *
     * @param head ListNode类
     * @param m int整型
     * @param n int整型
     * @return ListNode类
     */
    public ListNode reverseBetween (ListNode head, int m, int n) {
        ListNode p=head;
        // write code here
        HashMap<Integer, Integer> hm = new HashMap<>();
        for (int i = 0; i < n; i++) {
            if (i < m-1) {
                p = p.next;
                continue;
            }
            hm.put(i, p.val);
            p=p.next;
        }
        hm.forEach((i1,i2) -> System.out.println(i1+" "+i2));

        p=head;
        int temp=n-1;
        for (int i = 0; i < n; i++) {
            if (i < m-1) {
                p = p.next;
                continue;
            }
           p.val=hm.get(temp--);
            p=p.next;
           
        }
        return head;
    }
}

标签:head,ListNode,val,int,next,链表,后记,java
From: https://www.cnblogs.com/naoziinicu/p/17367641.html

相关文章

  • [Javascript] avoid mutation: Array.prototype.toSpliced() vs splice()
    Array.prototype.splice()mutatestheoriginalarray.Toavoidmutation,weuseArray.prototype.slice().newmethodArray.prototype.toSpliced()returnanewarraytoavoidthemutation.constmonths=["Jan","Mar","Apr",&quo......
  • [Javascript] Avoid mutation, Array.prototype.toSorted() vs sort()
    sort(),mutatestheoriginalarray,andreturnthereferencetooriginalarrayandsorted.The toSorted() methodof Array instancesisthe copying versionofthe sort() method.Itreturnsanewarraywiththeelementssortedinascendingorder.const......
  • [Javascript] Avoid mutation, Array.prototype.toReversed() vs reverse()
    reverse()mutatestheoriginalarray,returnthereferencepointtotheoriginalarray.The toReversed() methodof Array instancesisthe copying counterpartofthe reverse() method.Itreturnsanewarraywiththeelementsinreversedorder.constite......
  • [Javascript] Array.prototype.with
    Prevously,whenwewanttoupateaniteminsideaarray:constitems=[{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'},{id:4,name:'d'},{id:5,name:'e'}]constnewIt......
  • java面向对象
    面向对象介绍学习获取已有的对象并使用学习如何自己设计对象并使用—>面向对象语法学习步骤:设计对象并使用封装this关键字构造方法标准JavaBean对象对象内存图补充知识:成员变量、局部变量区别设计对象并使用类和对象:类(设计图):是对象共同特征的描述对象:是真......
  • Java逆向解密
    (这里是个解题的分界,涉及到了java,以后还会碰到py)依旧查壳。java的一般都是64位,按照老套路扔进IDA中,你会发现,你看不懂它在干嘛了,而且没有伪代码给你看了,因为IDA无法反编译java的文件,我们需要另一个软件jadx-gui来进行对java文件的反编译。拖进工具里,如下:简单的一个暴力枚举就可......
  • java(1)基础下载安装以及path环境变量配置
    一.java1.java语言跨平台原理(1):这里JVM指的是Java虚拟机,而Java虚拟机根据自己的需求下载不同的版本,有Window版JVM,macOs版JVM,linux版JVM。大概就是在需要运行JAVA应用程序的操作系统上,安装一个与操作系统相对应的java虚拟机(JVM)。2.JRE和JDK(1.)JRE(JavaRuntimeEnvironment)是j......
  • Java的stream操作
    Java中的stream只需告诉做什么,而不用管怎么做1.创建流1.1从数组创建流1.1.1Arrays提供String[]names={"nick","jack","michael","jone","jane"};//Arrays提供的返回流的接口Stream<String>stream=Arrays.stream(strs);查看Array......
  • Java内置工具类
    Java内置工具类1.String类首先,String类的值不能被更改如果对String对象操作(增加长度等),会新开辟一块内存空间,再更改String的指向(如果有的话),而原来字符串不变(可能指向被更改或者不存在)。因此如果要大量更改String类型时不推荐用他,应该用StringBuffer或者StringBuliderStrin......
  • ds:单链表
    写在前边:单链表:1.带头结点的单链表:L头指针->头结点(data域不存数据元素,只指向下一个元素)->a1->a2->..->NULL2.不带头结点的单链表:L头指针->a1->a2...->NULL以上两种区别在于:无头结点的单链表在进行插入/删除元素时要对i=1的情况做特殊处理 一、带头结点的单链表基本操作#......