package me.ramswaroop.linkedlists;
import me.ramswaroop.common.SingleLinkedList;
import me.ramswaroop.common.SingleLinkedNode;
/**
* Created by IntelliJ IDEA.
*
* @author: ramswaroop
* @date: 7/13/15
* @time: 12:54 PM
*/
public class MergeTwoLinkedListAlternatively {
/**
* Given two linked lists, insert nodes of second list into first list at
* alternate positions of first list till there are no more positions to
* insert in first list.
* <p/>
* Example,
* Input: L1: 5->7->17->13->11 and L2: 12->10->2->4->6
* Output: L1: 5->12->7->10->17->2->13->4->11->6 and L2: empty
* <p/>
* Input: L1: 1->2->3 and L2: 4->5->6->7->8
* Output: L1: 1->4->2->5->3->6 and L2: 7->8
*
* @param node1
* @param node2
* @param <E>
* @return
*/
public static <E extends Comparable<E>> SingleLinkedNode<E> mergeTwoLinkedListAlternatively(SingleLinkedNode<E> node1,
SingleLinkedNode<E> node2) {
SingleLinkedNode<E> curr1 = node1, curr2 = node2, temp1, temp2;
while (curr1 != null && curr2 != null) {
temp1 = curr1.next;
temp2 = curr2.next;
curr1.next = curr2;
curr2.next = temp1;
curr1 = temp1;
curr2 = temp2;
}
return curr2;
}
public static void main(String a[]) {
SingleLinkedList<Integer> linkedList1 = new SingleLinkedList<>();
linkedList1.add(00);
linkedList1.add(11);
linkedList1.add(22);
linkedList1.add(33);
linkedList1.add(44);
linkedList1.add(55);
linkedList1.printList();
SingleLinkedList<Integer> linkedList2 = new SingleLinkedList<>();
linkedList2.add(21);
linkedList2.add(33);
linkedList2.add(44);
linkedList2.add(55);
linkedList2.add(67);
linkedList2.add(89);
linkedList2.add(99);
linkedList2.printList();
SingleLinkedNode<Integer> list2 = mergeTwoLinkedListAlternatively(linkedList1.head, linkedList2.head);
linkedList1.printList();
SingleLinkedList.printList(list2);
}
}