- 题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
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; }
}
来源:LeetCode
- 示例
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
- 思路分析
很简单,用两个指针同时遍历两个链表并比较。
- JAVA实现
public class MergeTwoLists {
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head = new ListNode();
int flag = 0; //保存是哪个链表先遍历完毕
if(l1 == null) return l2;
if(l2 == null) return l1;
ListNode merge = head;
while(true) {
if(l1.val >= l2.val) {
merge.next = l2;
merge = merge.next;
if(l2.next != null) l2 = l2.next;
else break;
}
else {
merge.next = l1;
merge = merge.next;
if(l1.next != null) l1 = l1.next;
else {
flag = 1;
break;
}
}
}
merge.next = flag == 1 ? l2 : l1;
return head.next; //因为head初始化的时候有个头节点
}
}