package offer;
/**
* offer interview 17
*/
public class Test17 {
public static class ListNode{
int value;
ListNode next;
public ListNode(){}
public ListNode(int value){
this.value = value;
this.next = null;
}
}
//method 1
public static ListNode merge(ListNode head1 ,ListNode head2){
if (head1 == null){
return head2;
}
if (head2 == null){
return head1;
}
ListNode root = new ListNode();
ListNode pointer = root;
while (head1 !=null && head2 != null ){
if (head1.value < head2.value){
pointer.next = head1;
head1 = head1.next;
}else{
pointer.next = head2;
head2 = head2.next;
}
pointer = pointer.next;
}
if (head1 != null){
pointer.next = head1;
}
if (head2 != null){
pointer.next = head2;
}
return root.next;
}
public static void printList(ListNode head){
while (head != null){
System.out.print(head.value + "->");
head = head.next;
}
System.out.println("null");
}
//method 2
public static ListNode merge2(ListNode head1,ListNode head2){
if (head1 == null ){
return head2;
}
if (head2 == null){
return head1;
}
ListNode tmp = head1;
if (tmp.value < head2.value){
tmp.next = merge2(head1.next,head2);
}else{
tmp = head2;
tmp.next = merge2(head1,head2.next);
}
return tmp;
}
public static void main(String[] args){
ListNode head1 = new ListNode(1);
head1.next = new ListNode(2);
head1.next.next = new ListNode(3);
head1.next.next.next = new ListNode(4);
head1.next.next.next.next = new ListNode(5);
ListNode head2 = new ListNode(1);
head2.next= new ListNode(3);
head2.next.next = new ListNode(5);
head2.next.next.next = new ListNode(6);
head2.next.next.next.next = new ListNode(7);
// ListNode head = merge(head1,head2);
// printList(head);
// ListNode head = merge(null,null);
// printList(head);
// ListNode head = merge(null,head2);
// printList(head);
// ListNode head = merge(head1,null);
// printList(head);
ListNode head = merge2(head1,head2);
printList(head);
}
}