题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解法一:
public static ListNode Merge(ListNode list1, ListNode list2) {
if (list1 == null)
return list2;
if (list2 == null)
return list1;
// 创建一个临时结点,用于添加元素时方便
ListNode root = new ListNode(0);
// 用于指向合并后的新链的尾结点
ListNode pointer = root;
while (list1 != null && list2 != null) {
if (list1.val < list2.val) {
pointer.next = list1;
list1 = list1.next;
} else {
pointer.next = list2;
list2 = list2.next;
}
pointer = pointer.next;
}
if (list1 != null) {
pointer.next = list1;
}
if (list2 != null) {
pointer.next = list2;
}
return root.next;
}
解法二:
public static ListNode Merge2(ListNode list1, ListNode list2) {
if (list1 == null)
return list2;
if (list2 == null)
return list1;
ListNode head = null;
if (list1.val <= list2.val) {
head = list1;
head.next = Merge2(list1.next, list2);
} else {
head = list2;
head.next = Merge2(list1, list2.next);
}
return head;
}
完整代码:
public class ListNode {
int val;
ListNode next = null;
public ListNode(int val) {
this.val = val;
}
public static void printList(ListNode head) {
while (head != null) {
System.out.print(head.val + "->");
head = head.next;
}
}
public static void main(String[] args) {
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
printList(head);
System.out.println();
ListNode head2 = new ListNode(1);
head2.next = new ListNode(3);
head2.next.next = new ListNode(5);
head2.next.next.next = new ListNode(6);
head2.next.next.next.next = new ListNode(7);
printList(head2);
System.out.println();
head = Merge(head, head2);
// head = Merge2(head, head2);
printList(head);
}
}