24.合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
数据范围:
链表长度 [0,500]。
样例:
输入:1->3->5 , 2->4->5
输出:1->2->3->4->5->5
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode merge(ListNode l1, ListNode l2) {
//创建虚拟头节点
ListNode head = new ListNode(-1);
//pre指针用于构建新链表,初始指向虚拟头节点
ListNode pre = head;
//同时遍历两个链表,自导其中一个遍历完
while(l1!=null&&l2!=null){
//比较当前两个节点的值
if(l1.val<l2.val){
//如果l1的值比较小,将l1接在新链表后面
pre.next = l1;
//l1指针后移
l1 = l1.next;
}else{
//如果l2的值较小或相等,将l2接在新链表后面
pre.next = l2;
//l2指针后移
l2 = l2.next;
}
//新链表的指针后移
pre = pre.next;
}
//处理剩余的l1链表节点
while(l1!=null){
pre.next = l1;
pre = l1;
l1 = l1.next;
}
//处理剩余的l2链表节点
while(l2!=null){
pre.next = l2;
pre = l2;
l2 = l2.next;
}
//返回合并后的链表头节点(跳过虚拟头节点)
return head.next;
}
}