package com.interview.linklist;
/**
* http://www.geeksforgeeks.org/flatten-a-linked-list-with-next-and-child-pointers/
* Test case
* 0 node in the list
* 1 node in the list
* All nodes with child
* No nodes with child
*/
public class FlattenLinkList {
public void flatten(Node head) {
Node tail = getTail(head);
while (head != null) {
if (head.child != null) {
tail.next = head.child;
tail = getTail(tail.next);
head.child = null;
}
head = head.next;
}
}
private Node getTail(Node head) {
if (head == null) {
return null;
}
while (head.next != null) {
head = head.next;
}
return head;
}
public static void main(String args[]) {
LinkList ll = new LinkList();
Node head = null;
head = ll.addNode(10, head);
head = ll.addNode(5, head);
head = ll.addNode(12, head);
head = ll.addNode(7, head);
head = ll.addNode(11, head);
Node head1 = null;
head1 = ll.addNode(4, head1);
head1 = ll.addNode(20, head1);
head1 = ll.addNode(13, head1);
Node head2 = null;
head2 = ll.addNode(2, head2);
head2 = ll.addNode(8, head2);
Node head4 = null;
head4 = ll.addNode(17, head4);
head4 = ll.addNode(6, head4);
Node head5 = null;
head5 = ll.addNode(9, head5);
head5 = ll.addNode(8, head5);
head5 = ll.addNode(15, head5);
Node f1 = ll.find(head, 10);
f1.child = head1;
f1 = ll.find(head, 7);
f1.child = head4;
f1 = ll.find(head4, 17);
f1.child = head5;
f1 = ll.find(head1, 20);
f1.child = head2;
FlattenLinkList fll = new FlattenLinkList();
fll.flatten(head);
ll.printList(head);
}
}