本文共 1591 字,大约阅读时间需要 5 分钟。
题目描述:
输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的
思路:
递归扫描两个数组 每次将next指针指向连个链表中当前节点的较小值public static ListNode mergeOrderedList(ListNode list1, ListNode list2) { if (list1 == null){ return list2; } if (list2==null){ return list1; } ListNode node; if (list1.data < list2.data) { node = list1; node.next = mergeOrderedList(list1.next, list2); } else { node = list2; node.next = mergeOrderedList(list1, list2.next); } return node; }
public class MergeOrderedListTest extends BaseTest { private ListNode list1; private ListNode list2; @Override @Before public void setUp() throws Exception { super.setUp(); int[] data1 = new int[]{ 1, 2, 3, 4, 5}; int[] data2 = new int[]{ 2, 3, 4, 7, 8}; list1 = initList(data1); list2 = initList(data2); } @Test public void test() throws Exception { ListNode listNode = MergeOrderedList.mergeOrderedList(list1, list2); printList(listNode); } private ListNode initList(int[] data) { ListNode[] node = new ListNode[data.length]; for (int i = 0; i < node.length; i++) { node[i] = new ListNode(data[i]); } for (int i = 0; i < node.length - 1; i++) { node[i].next = node[i + 1]; } return node[0]; } private void printList(ListNode node) { while (node != null) { System.out.print(node.data+" "); node = node.next; } }}
输出结果
1 2 2 3 3 4 4 5 7 8
转载地址:http://jhqli.baihongyu.com/