两个有序单链表的合并
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class InsertList { //以其中一个链表为base表,另一个表向其中插入数据 // 测试失败,需要考虑的情况太多,很多漏洞~~~ 后来在网上发现了merger,很简便 public Node Insert(Node headNode1, Node headNode2) { Node headNode = null; Node base = new Node(headNode1); Node step = new Node(headNode2); if (base == null) { headNode = step; } if (step == null) { headNode = base; } if (base != null && step != null) { headNode = base; Node prebase = null; while (step != null) { while (base != null) { if (base.data >= step.data) { Node insertNode = new Node(step.data); if (prebase == null) { insertNode.next = base; headNode = insertNode; } else { prebase.next = insertNode; insertNode.next = base; prebase = insertNode; } break; } prebase = base; base = base.next; } step = step.next; } } return headNode; } //思想是,同时遍历两个链表,按照顺序向一条链表上加Node,组成一个新链表 public Node Merge(Node list1, Node list2) { if (list1 == null) return list2; if (list2 == null) return list1; Node tmp1 = new Node(list1); Node tmp2 = new Node(list2); Node head = new Node(0);//这里不能把返回链表赋值为null,因为下一行马上就要把它赋值给另一链表,得让它在内存里有位置才行 Node headptr = head; while (tmp1 != null && tmp2 != null) { if (tmp1.data <= tmp2.data) { head.next = tmp1; head = head.next; tmp1 = tmp1.next; } else { head.next = tmp2; head = head.next; tmp2 = tmp2.next; } } //其中一个链表已经跑到头之后,继续单链表的合并 while (tmp1 != null) { head.next = tmp1; head = head.next; tmp1 = tmp1.next; } while (tmp2 != null) { head.next = tmp2; head = head.next; tmp2 = tmp2.next; } head = headptr.next; return head; } }