双指针法合并2个有序链表,其实是归并排序的解决思路。
package sort;
public class MergeLinkedList {
public static void main(String[] args) {
ListNode l11 = new ListNode(1);
ListNode l12 = new ListNode(3);
ListNode l13 = new ListNode(5);
ListNode l14 = new ListNode(8);
l11.next = l12;
l12.next = l13;
l13.next = l14;
ListNode l21 = new ListNode(2);
ListNode l22 = new ListNode(4);
ListNode l23 = new ListNode(6);
ListNode l24 = new ListNode(9);
ListNode l25 = new ListNode(10);
l21.next = l22;
l22.next = l23;
l23.next = l24;
l24.next = l25;
ListNode listNode = mergeLinkedList(l11, l21);
print(listNode);
}
public static void print(ListNode listNode) {
while (listNode != null) {
if (listNode.next != null) {
System.out.print(listNode.val + "->");
} else {
System.out.print(listNode.val);
}
listNode = listNode.next;
}
}
public static ListNode mergeLinkedList(ListNode l1, ListNode l2) {
ListNode header = new ListNode(0);
ListNode p = header;
while (l1 != null && l2 != null) {
int val1 = l1.val;
int val2 = l2.val;
if (val1 < val2) {
p.next = l1;
l1 = l1.next;
} else {
p.next = l2;
l2 = l2.next;
}
p = p.next;
}
if (l1 != null) {
p.next = l1;
} else if (l2 != null) {
p.next = l2;
}
return header.next;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}