题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
//Definition for singly-linked list.
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
注意点
1、需要标记结果链表头结点(result)和结果链表的前一节点(pre);
2、返回结果为result.next。
实现
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode result = new ListNode(0); //结果的头结点
ListNode pre = result; //遍历的前一节点
while(l1 != null && l2 != null){
//将l1和l2中小的值添加到结果链表
if(l1.val <= l2.val){
pre.next = l1;
l1 = l1.next;
}else{
pre.next = l2;
l2 = l2.next;
}
pre = pre.next;
}
//将剩下的链表直接添加到结果链表
pre.next = l1 == null ? l2 : l1;
return result.next;
}