合并两个有序单链表,其实就是归并排序。
归并排序:先创建一个新链表,长度是两个单链表之和。然后比较两个单链表的第一个数,把数小的放入新链表,然后指针后移一位,依次比较,当某个链表遍历完了,把另一个链表剩下所有直接添加新链表后面就行了,时间复杂度O(log2n)
Java代码:
//创建空链表
LinkNode node=new LinkNode();//头指针
//空链表指针
LinkNode z=node;
while(node1!=null&&node2!=null) {
if(node1.value<=node2.value) {
z.value=node1.value;
z=z.next;
node1=node1.next;
}else {
z.value=node2.value;
z=z.next;
node2=node2.next;
}
}
//将剩下的另一个链表全部加入
if(node1==null) {
while(node2!=null) {
z.value=node2.value;
z=z.next;
node2=node2.next;
}
}else {
while(node1!=null) {
z.value=node1.value;
z=z.next;
node1=node1.next;
}
}