单链表——链表合并

package jxau.lyx.link;

/**
 * 
 * @author: liyixiang
 * @data:2014-10-2
 * @题目大意:
 * 		已知两个单链表pHead1 和pHead2 各自有序,把它们合并成一个链表依然有序
 * @主要思路:
 * 		 这个类似归并排序。尤其注意两个链表都为空,和其中一个为空时的情况。
 * @时间复杂度:
 * 		O(max(len1, len2))
 * @空间复杂度:
 * 		O(1)
 */
public class MergeSortedList {

	//结点
		private static class Node {           
			int val;           
			Node next;               
			
			public Node(int val) {               
				this.val = val;          
			}       
		}
	
	public Node mergeSortedListRec(Node head1,Node head2){
		
		 // 其中一个链表为空的情况,直接返回另一个链表头,O(1)           
		if (head1 == null) {   
			return head2;           
        }           
		
		if (head2 == null) {              
			return head1;      
		}
		
		Node mergeHead = null;           
		
		if (head1.val < head2.val) {          
			mergeHead = head1;               // 连接已解决的子问题   
			mergeHead.next = mergeSortedListRec(head1.next, head2);        
		} else {        
			mergeHead = head2;            
			mergeHead.next = mergeSortedListRec(head1, head2.next);       
		}           
		
		return mergeHead;  
	}
}


你可能感兴趣的:(单链表——链表合并)