题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
思路:使用递归,将未排序的两个链表继续添加到next上。
方法一:递归
public ListNode merge(ListNode head1, ListNode head2) {
if (head1 == null)
return head2;
if (head2 == null)
return head1;
ListNode head = null; // 注意此处声明
if (head1.val < head2.val) {
head = head1;
head.next = merge(head1.next, head2);
} else {
head = head2;
head.next = merge(head1, head2.next);
}
return head;
}
方法二:非递归
public ListNode merge2(ListNode head1, ListNode head2) {
if (head1 == null)
return head2;
if (head2 == null)
return head1;
ListNode phead = new ListNode(-1);
ListNode head = phead;
while (head1 != null && head2 != null) {
if (head1.val < head2.val) {
head.next = head1;
head1 = head1.next;
} else {
head.next = head2;
head2 = head2.next;
}
head = head.next;
}
if (head1 != null)
head.next = head1;
else if (head2 != null)
head.next = head2;
return phead.next;
}