Question:
Given two sorted linked list, and merge them without using extra space (using constant space is allowed). For example, if 1 -> 2 -> 5 merges with 2 -> 4 -> 5, we have 1 -> 2 -> 4 -> 5
Analyze:
using four pointers:
h1: point to the head of list 1
h2: point to the head of list 2;
small: the smaller head between h1 and h2;
prev: the last node in the "new" list;
public static Node mergeSortedListWithDuplicates(Node h1, Node h2) {
//one or both of the list(s) is (are) null
if(h1 == null) return h2;
if(h2 == null ) return h1;
Node newHead = (h1.data <= h2.data) ? h1 : h2;
Node small = null;
Node prev = newHead;
//proceed to compare two heads and until one of them is null
while (h1 != null && h2 != null) {
if (h1.data <= h2.data) {
small = h1;
h1 = h1.next;
} else {
small = h2;
h2 = h2.next;
}
prev.next = small;
prev = small;
}
//deal with the remaining part of h1 or h2
if (h1 == null) prev.next = h2;
if (h2 == null) prev.next = h1;
return newHead;
}
http:
blog.csdn.net/beiyeqingteng