Microsoft Interview Question
private Node mergeTwoSortedList(Node first, Node second){
Node mergedNode = null;
int firstCount = count(first);
int secondCount = count(second);
if(firstCount >0 || secondCount > 0){
Node mergedNodePtr = null;
Node firstPtr = first;
Node secondPtr = second;
while(firstPtr !=null && secondPtr !=null ){
if(firstPtr.getIntValue()>secondPtr.getIntValue()){
Node tempNode = new Node();
tempNode.setIntValue(secondPtr.getIntValue());
if(mergedNode == null){
mergedNode = tempNode;
mergedNodePtr = mergedNode;
}
else{
mergedNodePtr.setNext(tempNode);
mergedNodePtr = mergedNodePtr.getNext();
}
secondPtr = secondPtr.getNext();
}
else{
Node tempNode = new Node();
tempNode.setIntValue(firstPtr.getIntValue());
if(mergedNode == null){
mergedNode = tempNode;
mergedNodePtr = mergedNode;
}
else{
mergedNodePtr.setNext(tempNode);
mergedNodePtr = mergedNodePtr.getNext();
}
firstPtr = firstPtr.getNext();
}
}
if(firstPtr == null && secondPtr !=null){
while (secondPtr != null) {
Node tempNode = new Node();
tempNode.setIntValue(secondPtr.getIntValue());
if (mergedNode == null) {
mergedNode = tempNode;
mergedNodePtr = mergedNode;
}
else{
mergedNodePtr.setNext(tempNode);
mergedNodePtr = mergedNodePtr.getNext();
}
secondPtr = secondPtr.getNext();
}
}
if(secondPtr == null && firstPtr !=null){
while (firstPtr != null) {
Node tempNode = new Node();
tempNode.setIntValue(firstPtr.getIntValue());
if (mergedNode == null) {
mergedNode = tempNode;
mergedNodePtr = mergedNode;
}
else{
mergedNodePtr.setNext(tempNode);
mergedNodePtr = mergedNodePtr.getNext();
}
firstPtr = firstPtr.getNext();
}
}
}
return mergedNode;
}
private Node mergeTwoSortedList(Node first, Node second){
Node mergedNode = null;
int firstCount = count(first);
int secondCount = count(second);
if(firstCount >0 || secondCount > 0){
Node mergedNodePtr = null;
Node firstPtr = first;
Node secondPtr = second;
while(firstPtr !=null && secondPtr !=null ){
if(firstPtr.getIntValue()>secondPtr.getIntValue()){
Node tempNode = new Node();
tempNode.setIntValue(secondPtr.getIntValue());
if(mergedNode == null){
mergedNode = tempNode;
mergedNodePtr = mergedNode;
}
else{
mergedNodePtr.setNext(tempNode);
mergedNodePtr = mergedNodePtr.getNext();
}
secondPtr = secondPtr.getNext();
}
else{
Node tempNode = new Node();
tempNode.setIntValue(firstPtr.getIntValue());
if(mergedNode == null){
mergedNode = tempNode;
mergedNodePtr = mergedNode;
}
else{
mergedNodePtr.setNext(tempNode);
mergedNodePtr = mergedNodePtr.getNext();
}
firstPtr = firstPtr.getNext();
}
}
if(firstPtr == null && secondPtr !=null){
while (secondPtr != null) {
Node tempNode = new Node();
tempNode.setIntValue(secondPtr.getIntValue());
if (mergedNode == null) {
mergedNode = tempNode;
mergedNodePtr = mergedNode;
}
else{
mergedNodePtr.setNext(tempNode);
mergedNodePtr = mergedNodePtr.getNext();
}
secondPtr = secondPtr.getNext();
}
}
if(secondPtr == null && firstPtr !=null){
while (firstPtr != null) {
Node tempNode = new Node();
tempNode.setIntValue(firstPtr.getIntValue());
if (mergedNode == null) {
mergedNode = tempNode;
mergedNodePtr = mergedNode;
}
else{
mergedNodePtr.setNext(tempNode);
mergedNodePtr = mergedNodePtr.getNext();
}
firstPtr = firstPtr.getNext();
}
}
}
return mergedNode;
}
NodePtr tmp,tmp1,tmp2;
tmp1 = ll1; tmp2 = ll2; //point to root initially
tmp = ll1;
while(tmp1!=NULL && tmp2!=NULL){
if(*tmp2<*tmp1){
tmp = tmp2
tmp2 = tmp->next;
tmp->next = tmp1;
continue;
}else{
tmp = tmp1;
tmp1 = tmp->next;
tmp->next = tmp2;
}
}
if(*ll2<*ll1)
ll1 = ll2;
else
ll2 = ll1;
//both lists should be merged and ll1 & ll2 point to the same list
The list "list2" contains the merged list of list1 and list2.
- Jit January 30, 2011