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

链表内指定区间反转

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;
    }
}

全部评论

相关推荐

只有一个苍穹外卖外加正在看黑马点评,可以找小厂实习吗,还有我的简历有什么大问题吗
Java抽象小篮子:感觉有点熟悉,问题1是学历,2是没实习经历,3是专业技能写得太少太少了(怎么写可以看我置顶帖),4是仅这一个项目找实习不够看。拷打完毕,简历怎么写可以看我置顶帖子
点赞 评论 收藏
分享
迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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