题目:
合并两个从小到大链表的链表,使用的算法越快越好。
比如:L1={1,3,5}, L2={2,4},
L1.merge(L2)后,L1={1,2,3,4,5}, L2={}
此博客实现的是无头结点的单链表合并的类型
public class Problem1 {
public static void main(String[] args) {
System.out.println("初始化L1和L2");
int[] nums1 = {2,4},nums2 = {1,3,5};
LinkNode L1 = new LinkNode(),L2 = new LinkNode();
//初始化L2
L2.val = nums2[0];
LinkNode p1 = L2;
for(int i=1; i < 3; i++) {
LinkNode newNode = new LinkNode();
newNode.val = nums2[i];
newNode.next = null;
p1.next = newNode;
p1 = newNode;
}
//初始化L1
L1.val = nums1[0];
LinkNode newNode = new LinkNode();
newNode.val = nums1[1];
newNode.next = null;
L1.next = newNode;
System.out.println("输出合并前的L1");
L1.displayList();
System.out.println("输出合并前的L2");
L2.displayList();
System.out.println("合并L1和L2");
L1.merge(L2);
System.out.println("输出合并后的L1");
L1.displayList();
System.out.println("输出合并后的L2");
L2.displayList();
}
public static class LinkNode {
int val;
LinkNode next;
/* L1={1,3,5}, L2={2,4} */
private void merge(LinkNode node) {
System.out.println("开始合并");
LinkNode p, pre,rear;
if (node.val > val) {// 把小的那个结点作为新链表的起始结点
System.out.println("L1的第一个结点作为起始结点");
p = next;
pre = this;
rear = node.next;
int count = 0;
while (node != null) {
count++;
if(count >10)
break;
// System.out.println("把L2的元素"+node.val+"插入L1中去");
while (p.val < node.val) {
// 找到插入位置
pre = p;
p = p.next;
}
// node结点插入在pre结点后面
// System.out.println("node结点插入在"+pre.val+"结点后面");
node.next = pre.next;
pre.next = node;
node = rear;// node后移
if(rear != null)
rear = rear.next;
}
} else {
System.out.println("L2的第一个结点作为起始结点");
pre = node;
p = node.next;
// 把L1的元素插入L2中去
LinkNode p2 = this,rear2 = next;// 用来遍历L1
while (p2 != null) {
while (p.val < p2.val) {
// 找到插入位置
pre = p;
p = p.next;
}
// p2结点插入到pre结点后面
p2.next = pre.next;
pre.next = p2;
p2 = rear2;// p2结点后移
if(rear2 != null) {
rear2 = rear2.next;
}
}
}
}// merge
public void displayList() {
LinkNode p = this;
while(p!=null) {
System.out.println(p.val);
p = p.next;
}
}
}
}
本文介绍了一种快速合并两个已排序单链表的算法。通过比较两个链表节点的值,将较小的节点插入到结果链表中,直到一个链表的所有节点都被处理。该算法在合并过程中保持了链表的有序性,最终得到一个合并后的有序链表。

8528

被折叠的 条评论
为什么被折叠?



