diff --git a/budd-common/src/main/java/io/github/ehlxr/algorithm/linkedlist/Leecode21.java b/budd-common/src/main/java/io/github/ehlxr/algorithm/linkedlist/Leecode21.java new file mode 100644 index 0000000..49b0a38 --- /dev/null +++ b/budd-common/src/main/java/io/github/ehlxr/algorithm/linkedlist/Leecode21.java @@ -0,0 +1,122 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2020 xrv + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package io.github.ehlxr.algorithm.linkedlist; + +/** + * @author ehlxr + * @since 2022-04-15 08:41. + */ +public class Leecode21 { + public static class ListNode { + int val; + ListNode next; + + ListNode() { + } + + ListNode(int val) { + this.val = val; + } + + ListNode(int val, ListNode next) { + this.val = val; + this.next = next; + } + } + + public static void main(String[] args) { + ListNode list1 = new ListNode(1); + ListNode list2 = new ListNode(2); + ListNode list3 = new ListNode(4); + list1.next = list2; + list2.next = list3; + ListNode list4 = new ListNode(1); + ListNode list5 = new ListNode(3); + ListNode list6 = new ListNode(4); + list4.next = list5; + list5.next = list6; + ListNode list7 = mergeTwoLists(list1, list4); + while (list7 != null) { + System.out.println(list7.val); + list7 = list7.next; + } + } + + public static ListNode mergeTwoLists(ListNode list1, ListNode list2) { + ListNode res = new ListNode(); + ListNode tmp = res; + + while (list1 != null || list2 != null) { + if (list1 == null) { + tmp.next = list2; + break; + } + if (list2 == null) { + tmp.next = list1; + break; + } + if (list1.val < list2.val) { + tmp.next = list1; + list1 = list1.next; + } else { + tmp.next = list2; + list2 = list2.next; + } + tmp = tmp.next; + } + + return res.next; + } + + public static ListNode mergeTwoLists2(ListNode l1, ListNode l2) { + // 虚拟头结点 + ListNode dummy = new ListNode(-1), p = dummy; + ListNode p1 = l1, p2 = l2; + + while (p1 != null && p2 != null) { + // 比较 p1 和 p2 两个指针 + // 将值较小的的节点接到 p 指针 + if (p1.val > p2.val) { + p.next = p2; + p2 = p2.next; + } else { + p.next = p1; + p1 = p1.next; + } + // p 指针不断前进 + p = p.next; + } + + if (p1 != null) { + p.next = p1; + } + + if (p2 != null) { + p.next = p2; + } + + return dummy.next; + } +}