题解 | #链表内指定区间反转#

链表内指定区间反转

https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c

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) {
        // write code here
	  //保存区间前的数据
        ArrayList<Integer> begin=new ArrayList<>();
	  //保存区间数据
        ArrayList<Integer> mid=new ArrayList<>();
	  //保存区间后的数据
        ArrayList<Integer> end=new ArrayList<>();
	  //用来反正区间的数据
        Stack<Integer> stack=new Stack<>();
        ListNode find=head;
        int i=1;
	  //初始化begin、mid、end集合数值
        while(find!=null){
		  //小于m添加到begin集合
            if(i<m){
                begin.add(find.val);
            }
		  //在m、n区间添加到栈用来反转
            if(i>=m&&i<=n){
                stack.push(find.val);
            }
		  //大于n添加到end集合
            if(i>n){
                end.add(find.val);
            }
            i++;
            find=find.next;
        }
	  //反转完成添加到mid集合
        while(!stack.isEmpty()){
            mid.add(stack.pop());
        }
	  //将begin、mid、end集合合并
        begin.addAll(mid);
        begin.addAll(end);
        i=1;
	  //生成链表
        Integer first=begin.get(0);
        ListNode tmp=new ListNode(first);
        ListNode returnList=tmp;
        for(Integer num:begin){
            if(i==1){
                i++;
                continue;
            }
            ListNode tmpNode=new ListNode(num);
            tmp.next=tmpNode;
            tmp=tmp.next;
        }
        return returnList;
    }
}

全部评论

相关推荐

风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 20:55
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务