import java.util.*;

/*
 * public class Interval {
 *   int start;
 *   int end;
 *   public Interval(int start, int end) {
 *     this.start = start;
 *     this.end = end;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param intervals Interval类ArrayList 
     * @return Interval类ArrayList
     */
    public ArrayList<Interval> merge (ArrayList<Interval> intervals) {
        // write code here
        if(intervals.size() == 0)return new ArrayList<Interval>();
	  // 排个序,保证按start升序排序
        Collections.sort(intervals, (Interval a, Interval b) -> a.start - b.start);
	  // 使用LinkedList
        LinkedList<Interval> res = new LinkedList<>();
        res.add(intervals.get(0));
        for(int i = 1; i < intervals.size(); i++){
            if(intervals.get(i).start > res.getLast().end){ // 每次与链表最后一个比较
                res.add(intervals.get(i)); // 不重叠
            }else{
                int pre = res.getLast().end;
                int start = res.getLast().start;
                int end = Math.max(pre, intervals.get(i).end);
                res.removeLast(); // 要把最后一个删掉
                res.add(new Interval(start, end)); // 添加合并后的
            }
        }
        return new ArrayList<>(res);
    }
}