package cn.dzp.flyroc.offer; public class MergeDemo { /*题目描述:输入两个单调递增的链表,输出两个链表合成后的链表 * 固然咱们须要合成后的链表知足单调不减规则*/ /*思路:递归与非递归求解,小数放在前面*/ //代码实现 public static class ListNode{ int data; ListNode nextNode = null; ListNode(int data){ this.data = data; } } public static ListNode Merge(ListNode list1, ListNode list2){ if (list1 == null){ //判断list1是否为空 return list2; } if (list2 == null){ //判断list2是否为空 return list1; } ListNode newHead = null; //创建一个新的头节点(用来存储比较后小的节点值) if (list1.data <= list2.data){ //list1中的值小,将值放入头节点,头结点的下一个节点进行递归遍历 newHead = list1; newHead.nextNode = Merge(list1.nextNode, list2); }else { //list2中的元素小 newHead = list2; newHead.nextNode = Merge(list1, list2.nextNode); } System.out.println("这是递归后的链表:"+newHead.data); return newHead; } public static void main(String[] args){ ListNode list1 = new ListNode(1); ListNode list3 = new ListNode(3); ListNode list5 = new ListNode(5); list1.nextNode = list3; list3.nextNode = list5; list5.nextNode = null; ListNode list2 = new ListNode(2); ListNode list4 = new ListNode(4); ListNode list6 = new ListNode(6); list2.nextNode = list4; list4.nextNode = list6; list6.nextNode = null; Merge(list1, list2); } }