leetcode 23:Merge k Sorted Lists

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

题目分析:两个链表的链接会不会,归并排序,复杂度为O(N),N为节点数。

多个链表排序,两个两个归并,再归并,这样相当于做了logK层,每一层都为N,则复发度为o(NlogK),

public class MergeKSortedLists {
	 public ListNode mergeKLists(ListNode[] lists) {
		 int len=lists.length;
		 if(len==1) return lists[0];
		 if(len==0) return null;
		 /*把链表一分为二*/
		 ListNode[] list1=new ListNode[len/2];
		 ListNode[] list2=new ListNode[(len+1)/2];
		 for(int i=0;i<=len/2-1;i++)
		 {
			 list1[i]=lists[i];
		 }
		 for(int i=0;i<=(len+1)/2-1;i++)
		 {
			 list2[i]=lists[i+len/2];
		 }
		 /*递归归并*/
		  ListNode head1=mergeKLists(list1);
		  ListNode head2=mergeKLists(list2);
		 return mergeTwoLists(head1,head2);
	        
	    }
	 public ListNode mergeTwoLists(ListNode one,ListNode two)
	 {
		 ListNode head=new ListNode(-1);
		 ListNode p=head;
          while(one!=null&&two!=null)
          {
        	  if(one.val<=two.val)
        	  {
        		  p.next=one;
        		  one=one.next;
        		  
        	  }
        	  else
        	  {
        		  p.next=two;
        		  two=two.next;
        	  }
        	  p=p.next;
          }
          if(one!=null)
        	  p.next=one;
          else
        	  p.next=two;
          return head.next;
	 }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值