题目描述:
输入两个排序的链表,合并这两个链表并使新链表的结点仍然是按递增排序的。
解题思路:
思路很简单,就是比较两个头结点的大小,取较小的结点加入到新链表中去,一个简单的递归。
要注意的是鲁棒性,检查输入。
代码:
public class MergeListTest {
static class Node {
int key;
Node next;
}
public static Node merge(Node node1, Node node2) {
if (node1 == null) {
return node2;
} else if (node2 == null) {
return node1;
}
Node mergeHead = null;
if (node1.key < node2.key) {
mergeHead = node1;
mergeHead.next = merge(node1.next, node2);
} else {
mergeHead = node2;
mergeHead.next = merge(node1, node2.next);
}
return mergeHead;
}
public static void main(String[] args) {
// 建立一个测试链表
Node node1 = new Node();
node1.key = 0;
Node p = node1;
for (int i = 2; i < 10; i += 2) {
Node node = new Node();
node.key = i;
node.next = null;
p.next = node;
p = node;
}
Node node2 = new Node();
node2.key = 1;
Node p2 = node2;
for (int i = 3; i < 10; i += 2) {
Node node = new Node();
node.key = i;
node.next = null;
p2.next = node;
p2 = node;
}
Node head = merge(node1, node2);
while (head != null) {
System.out.println(head.key);
head = head.next;
}
}
}