赞
踩
Q:合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。
A:分治+递归
1.将两个链表合并(递归)
2.分治:求一个mid,将mid左边的合并,mid右边的合并,最后将两边的合并
3.重复这一过程,直到获取最终的结果
在这里插入代码片import java.util.*; /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode mergeKLists(ArrayList<ListNode> lists) { return mergeList(lists,0,lists.size()-1); } public ListNode mergeList(ArrayList<ListNode> lists,int left,int right) { if(left==right){ return lists.get(left); } if(left>right) { return null; } int mid = left+(right-left)/2; return merge(mergeList(lists,left,mid),mergeList(lists,mid+1,right)); } //递归合并两个有序链表 public ListNode merge(ListNode l1, ListNode l2) { if(l1==null) { return l2; } if(l2==null) { return l1; } if(l1.val<l2.val) { l1.next=merge(l1.next,l2); return l1; } else{ l2.next=merge(l1,l2.next); return l2; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。