From e6c44542f4bb513db1b7fa1659939b54c812bf2e Mon Sep 17 00:00:00 2001 From: yuanguangxin <274841922@qq.com> Date: Fri, 31 Jan 2020 02:41:52 +0800 Subject: [PATCH] add q21 --- .idea/workspace.xml | 98 +++++++++++++++++++++++----------------- src/q21/f1/ListNode.java | 10 ++++ src/q21/f1/Solution.java | 35 ++++++++++++++ src/q21/f2/ListNode.java | 10 ++++ src/q21/f2/Solution.java | 20 ++++++++ 5 files changed, 131 insertions(+), 42 deletions(-) create mode 100644 src/q21/f1/ListNode.java create mode 100644 src/q21/f1/Solution.java create mode 100644 src/q21/f2/ListNode.java create mode 100644 src/q21/f2/Solution.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index f687277..3193ccd 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,9 +2,10 @@ - - - + + + + + @@ -74,7 +76,7 @@ - + - - @@ -210,7 +212,7 @@ - + 1580045439607 @@ -240,7 +242,14 @@ - @@ -251,65 +260,70 @@ - - + - - + + - - - + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + + + + + + - - + + - + - + diff --git a/src/q21/f1/ListNode.java b/src/q21/f1/ListNode.java new file mode 100644 index 0000000..dcbe49b --- /dev/null +++ b/src/q21/f1/ListNode.java @@ -0,0 +1,10 @@ +package q21.f1; + +public class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + } +} diff --git a/src/q21/f1/Solution.java b/src/q21/f1/Solution.java new file mode 100644 index 0000000..b33af8a --- /dev/null +++ b/src/q21/f1/Solution.java @@ -0,0 +1,35 @@ +package q21.f1; + +/** + * 插队法 - 遍历迭代 o(n) + */ +public class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + if (l1 == null) { + return l2; + } + if (l2 == null) { + return l1; + } + ListNode head = new ListNode(Integer.MIN_VALUE); + head.next = l1; + ListNode pre = head; + while (l2 != null) { + ListNode t1 = pre.next; + ListNode t2 = l2.next; + while (l2.val > t1.val) { + if (t1.next == null) { + t1.next = l2; + return head.next; + } else { + pre = pre.next; + t1 = t1.next; + } + } + pre.next = l2; + l2.next = t1; + l2 = t2; + } + return head.next; + } +} diff --git a/src/q21/f2/ListNode.java b/src/q21/f2/ListNode.java new file mode 100644 index 0000000..3ccfdda --- /dev/null +++ b/src/q21/f2/ListNode.java @@ -0,0 +1,10 @@ +package q21.f2; + +public class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + } +} diff --git a/src/q21/f2/Solution.java b/src/q21/f2/Solution.java new file mode 100644 index 0000000..c229827 --- /dev/null +++ b/src/q21/f2/Solution.java @@ -0,0 +1,20 @@ +package q21.f2; + +/** + * 递归(看成两个链表头部较小的一个与剩下元素的 merge 操作结果合并) o(n) + */ +public class Solution { + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + if (l1 == null) { + return l2; + } else if (l2 == null) { + return l1; + } else if (l1.val < l2.val) { + l1.next = mergeTwoLists(l1.next, l2); + return l1; + } else { + l2.next = mergeTwoLists(l1, l2.next); + return l2; + } + } +}