a
3、題目
兩個有序鏈表序列的合併,要求:不增加新的空間,只進行指針的操作
例如:有兩個單鏈表 list1: 1 -> 3 -> 5 -> 8 -> 9 ,list2 : 2-> 4 -> 6 -> 7 -> 10 ,合併
class LinkedNode<T> {
public T value;
public LinkedNode<T> next;
public LinkedNode<T> pre;
LinkedNode(T value){
this.value = value;
}
}
public class LinkedList {
public void print(LinkedNode<Integer> root){
LinkedNode<Integer> tmp = root;
while (tmp!=null){
System.out.print(tmp.value+" ");
tmp = tmp.next;
}
System.out.println();
}
public LinkedNode<Integer> constructLinkedList(LinkedNode<Integer>... nodes){
LinkedNode<Integer> root = new LinkedNode<>(0);
LinkedNode<Integer> tmp = root;
for(LinkedNode<Integer> node:nodes){
tmp.next = node;
tmp = tmp.next;
}
return root.next;
}
@Test
public void test1(){
LinkedNode<Integer> node11 = new LinkedNode<>(1);
LinkedNode<Integer> node12 = new LinkedNode<>(3);
LinkedNode<Integer> node13 = new LinkedNode<>(5);
LinkedNode<Integer> node14 = new LinkedNode<>(8);
LinkedNode<Integer> node15 = new LinkedNode<>(9);
LinkedNode<Integer> node21 = new LinkedNode<>(2);
LinkedNode<Integer> node22 = new LinkedNode<>(4);
LinkedNode<Integer> node23 = new LinkedNode<>(6);
LinkedNode<Integer> node24 = new LinkedNode<>(7);
LinkedNode<Integer> node25 = new LinkedNode<>(10);
LinkedNode<Integer> root1 = constructLinkedList(node11,node12,node13,node14,node15);
LinkedNode<Integer> root2 = constructLinkedList(node21,node22,node23,node24,node25);
System.out.println("before merge");
print(root1);
print(root2);
System.out.println("-------");
LinkedNode<Integer> root = null;
LinkedNode<Integer> tmp1 = null;
LinkedNode<Integer> tmp2 = null;
LinkedNode<Integer> tmp = null;
if(root1.value<root2.value){
root = root1;
tmp1 = root1.next;
root.next = null;
tmp2 = root2;
}else {
root = root2;
tmp2 = root2.next;
root.next = null;
tmp1 = root1;
}
tmp = root;
while (tmp1 !=null && tmp2 !=null){
if(tmp1.value<tmp2.value){
tmp.next = tmp1;
tmp = tmp.next;
tmp1 = tmp1.next;
tmp.next=null;
}else {
tmp.next = tmp2;
tmp = tmp.next;
tmp2 = tmp2.next;
tmp.next=null;
}
}
while (tmp1!=null){
tmp.next = tmp1;
tmp1 = tmp1.next;
tmp = tmp.next;
}
while (tmp2!=null){
tmp.next = tmp2;
tmp2 = tmp2.next;
tmp = tmp.next;
}
tmp.next = null;
print(root);
}
}
運行結果如下:
before merge
1 3 5 8 9
2 4 6 7 10
-------
1 2 3 4 5 6 7 8 9 10