一、题目
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
- 示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
二、编码
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) { //若有空链表直接返另一条
return l2;
}
if (l2 == null) {
return l1;
}
ListNode head1 = l1; //link1的头结点
ListNode head2 = l2; //link2的头结点
ListNode cur = null; //待插入元素的前驱
boolean bool = false; //用来判断最后返回哪条链表
//哪条链表第一个元素的值较小,cur用来指向它,将另一条链表的元素插入其中
if (head1.val <= head2.val) {
cur = head1;
head1 = head1.next;
bool = true; //若head1.next.val <= head2.next.val,则将link1作为排序后的新链表返回
} else {
cur = head2; //否则link2作为新链表返回
head2 = head2.next;
}
while (head1 != null && head2 != null) {
if (head1.val <= head2.val) {
cur.next = head1;
head1 = head1.next;
} else {
cur.next = head2;
head2 = head2.next;
}
cur = cur.next;
}
//退出上面循环说明有一条链表以及遍历完了
if (head1 == null) { //link1遍历完了,将link2剩余部分插入在cur的后面
cur.next = head2;
}
if (head2 == null) { //link2遍历完了,将link1剩余部分插入在cur的后面
cur.next = head1;
}
if (bool) { //若bool为true,说明cur最开始指向head1,此时返回link1
return l1;
}
return l2; //否则返回link2
}