将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
firstNode //相当于头节点
思路:
这个题目就是归并排序中的归并操作,将两个有序数组(链表)合并为一个有序的数组。
//第一个while循环,将 l1 和 l2 进行比较,谁小谁就合并到 listNode,直到 l1 或者 l2 为空
//第二个while循环和第三个while循环,将 l1 或者 l2 剩下的节点合并到 listNode
最后返回的是 firstNode.next //头节点是不需要的
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode listNode = new ListNode(0);//建立两字符串连接的链表
ListNode firstNode = listNode;//设定头结点
while(l1 != null && l2 != null)
{
if(l1.val <= l2.val)//当L1的值小时,插入链表中
{
listNode.next = l1;
l1 = l1.next;
}else{
listNode.next = l2;
l2 = l2.next;//当L2的值小时,插入链表中
}
listNode = listNode.next;
}
while(l1 != null){
listNode.next = l1;
l1 = l1.next;
listNode = listNode.next;//当l1链表中还有数时继续插入
}
while(l2 != null){
listNode.next = l2;
l2 = l2.next;
listNode = listNode.next;
}
return firstNode.next;//返回的值应舍弃头结点
}
}