由于链表只是一个单向链表
所以不能在一次循环之内就直接进行反转操作
又因为只需要反转部分链表
所以只要将链表遍历到需要反转的最后一位,剩下的不用管了
于是我想到了在第一遍循环中用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