合并两排序链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
如上图所示,将链表1和链表2合并的结果就是链表3.即合并后的链表单调不减.
解题思路:
如图,首先比较p1
,p2
两个链头节点,将数值小的节点作为新的链表的头结点,然后将p1
的第二个节点作为链头与p2
进行比较,较小的作为新链的第2个节点,如此反复,这种情况很容易想到使用递归方式来解.
示例代码
static class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
public static ListNode merge(ListNode list1, ListNode list2) {
if (list1 == null) {
return list2;
}
if (list2 == null) {
return list1;
}
ListNode head;
if (list1.val < list2.val) {
list1.next = merge(list1.next, list2);
head = list1;
} else {
list2.next = merge(list1, list2.next);
head = list2;
}
return head;
}
这里需要注意的是特殊值的处理,即当一个空链表与另一个非空链表进行合并时,只需要返回非空链表即可.