From decf8947f85377b3f31df054ced48ade60f3940e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Velimir=20=C4=90urkovi=C4=87?= Date: Fri, 7 Feb 2025 02:26:24 +0100 Subject: [PATCH 1/2] feat: update solutions to lc problem: No.0021 --- .../0021.Merge Two Sorted Lists/README.md | 162 ++++++++++++++---- .../0021.Merge Two Sorted Lists/README_EN.md | 162 ++++++++++++++---- .../0021.Merge Two Sorted Lists/Solution.cs | 31 ++-- .../0021.Merge Two Sorted Lists/Solution.php | 54 +++--- .../0021.Merge Two Sorted Lists/Solution.rb | 27 ++- .../0021.Merge Two Sorted Lists/Solution2.cs | 29 ++++ .../0021.Merge Two Sorted Lists/Solution2.php | 37 ++++ .../0021.Merge Two Sorted Lists/Solution2.rb | 27 +++ 8 files changed, 401 insertions(+), 128 deletions(-) create mode 100644 solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.cs create mode 100644 solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.php create mode 100644 solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.rb diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/README.md b/solution/0000-0099/0021.Merge Two Sorted Lists/README.md index 264c42ada1421..e49417e6ecf55 100644 --- a/solution/0000-0099/0021.Merge Two Sorted Lists/README.md +++ b/solution/0000-0099/0021.Merge Two Sorted Lists/README.md @@ -295,24 +295,19 @@ var mergeTwoLists = function (list1, list2) { */ public class Solution { public ListNode MergeTwoLists(ListNode list1, ListNode list2) { - ListNode dummy = new ListNode(); - ListNode cur = dummy; - while (list1 != null && list2 != null) - { - if (list1.val <= list2.val) - { - cur.next = list1; - list1 = list1.next; - } - else - { - cur.next = list2; - list2 = list2.next; - } - cur = cur.next; + if (list1 == null) { + return list2; + } + if (list2 == null) { + return list1; + } + if (list1.val <= list2.val) { + list1.next = MergeTwoLists(list1.next, list2); + return list1; + } else { + list2.next = MergeTwoLists(list1, list2.next); + return list2; } - cur.next = list1 == null ? list2 : list1; - return dummy.next; } } ``` @@ -332,23 +327,61 @@ public class Solution { # @param {ListNode} list2 # @return {ListNode} def merge_two_lists(list1, list2) - dummy = ListNode.new() - cur = dummy - while list1 && list2 - if list1.val <= list2.val - cur.next = list1 - list1 = list1.next - else - cur.next = list2 - list2 = list2.next - end - cur = cur.next + if list1.nil? + return list2 + end + if list2.nil? + return list1 + end + if list1.val <= list2.val + list1.next = merge_two_lists(list1.next, list2) + return list1 + else + list2.next = merge_two_lists(list1, list2.next) + return list2 end - cur.next = list1 || list2 - dummy.next end ``` +#### PHP + +```php +/** + * Definition for a singly-linked list. + * class ListNode { + * public $val = 0; + * public $next = null; + * function __construct($val = 0, $next = null) { + * $this->val = $val; + * $this->next = $next; + * } + * } + */ +class Solution { + + /** + * @param ListNode $list1 + * @param ListNode $list2 + * @return ListNode + */ + function mergeTwoLists($list1, $list2) { + if (is_null($list1)) { + return $list2; + } + if (is_null($list2)) { + return $list1; + } + if ($list1->val <= $list2->val) { + $list1->next = $this->mergeTwoLists($list1->next, $list2); + return $list1; + } else { + $list2->next = $this->mergeTwoLists($list1, $list2->next); + return $list2; + } + } +} +``` + @@ -603,6 +636,72 @@ var mergeTwoLists = function (list1, list2) { }; ``` +#### C# + +```cs +/** + * Definition for singly-linked list. + * public class ListNode { + * public int val; + * public ListNode next; + * public ListNode(int val=0, ListNode next=null) { + * this.val = val; + * this.next = next; + * } + * } + */ +public class Solution { + public ListNode MergeTwoLists(ListNode list1, ListNode list2) { + ListNode dummy = new ListNode(); + ListNode curr = dummy; + while (list1 != null && list2 != null) { + if (list1.val <= list2.val) { + curr.next = list1; + list1 = list1.next; + } else { + curr.next = list2; + list2 = list2.next; + } + curr = curr.next; + } + curr.next = list1 == null ? list2 : list1; + return dummy.next; + } +} +``` + +#### Ruby + +```rb +# Definition for singly-linked list. +# class ListNode +# attr_accessor :val, :next +# def initialize(val = 0, _next = nil) +# @val = val +# @next = _next +# end +# end +# @param {ListNode} list1 +# @param {ListNode} list2 +# @return {ListNode} +def merge_two_lists(list1, list2) + dummy = ListNode.new() + cur = dummy + while list1 && list2 + if list1.val <= list2.val + cur.next = list1 + list1 = list1.next + else + cur.next = list2 + list2 = list2.next + end + cur = cur.next + end + cur.next = list1 || list2 + dummy.next +end +``` + #### PHP ```php @@ -616,18 +715,15 @@ var mergeTwoLists = function (list1, list2) { # $this->next = $next; # } # } - class Solution { /** * @param ListNode $list1 * @param ListNode $list2 * @return ListNode */ - function mergeTwoLists($list1, $list2) { $dummy = new ListNode(0); $current = $dummy; - while ($list1 != null && $list2 != null) { if ($list1->val <= $list2->val) { $current->next = $list1; diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md b/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md index 1aaa040d75715..24fbfe69fc3b5 100644 --- a/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md +++ b/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md @@ -297,24 +297,19 @@ var mergeTwoLists = function (list1, list2) { */ public class Solution { public ListNode MergeTwoLists(ListNode list1, ListNode list2) { - ListNode dummy = new ListNode(); - ListNode cur = dummy; - while (list1 != null && list2 != null) - { - if (list1.val <= list2.val) - { - cur.next = list1; - list1 = list1.next; - } - else - { - cur.next = list2; - list2 = list2.next; - } - cur = cur.next; + if (list1 == null) { + return list2; + } + if (list2 == null) { + return list1; + } + if (list1.val <= list2.val) { + list1.next = MergeTwoLists(list1.next, list2); + return list1; + } else { + list2.next = MergeTwoLists(list1, list2.next); + return list2; } - cur.next = list1 == null ? list2 : list1; - return dummy.next; } } ``` @@ -334,23 +329,61 @@ public class Solution { # @param {ListNode} list2 # @return {ListNode} def merge_two_lists(list1, list2) - dummy = ListNode.new() - cur = dummy - while list1 && list2 - if list1.val <= list2.val - cur.next = list1 - list1 = list1.next - else - cur.next = list2 - list2 = list2.next - end - cur = cur.next + if list1.nil? + return list2 + end + if list2.nil? + return list1 + end + if list1.val <= list2.val + list1.next = merge_two_lists(list1.next, list2) + return list1 + else + list2.next = merge_two_lists(list1, list2.next) + return list2 end - cur.next = list1 || list2 - dummy.next end ``` +#### PHP + +```php +/** + * Definition for a singly-linked list. + * class ListNode { + * public $val = 0; + * public $next = null; + * function __construct($val = 0, $next = null) { + * $this->val = $val; + * $this->next = $next; + * } + * } + */ +class Solution { + + /** + * @param ListNode $list1 + * @param ListNode $list2 + * @return ListNode + */ + function mergeTwoLists($list1, $list2) { + if (is_null($list1)) { + return $list2; + } + if (is_null($list2)) { + return $list1; + } + if ($list1->val <= $list2->val) { + $list1->next = $this->mergeTwoLists($list1->next, $list2); + return $list1; + } else { + $list2->next = $this->mergeTwoLists($list1, $list2->next); + return $list2; + } + } +} +``` + @@ -605,6 +638,72 @@ var mergeTwoLists = function (list1, list2) { }; ``` +#### C# + +```cs +/** + * Definition for singly-linked list. + * public class ListNode { + * public int val; + * public ListNode next; + * public ListNode(int val=0, ListNode next=null) { + * this.val = val; + * this.next = next; + * } + * } + */ +public class Solution { + public ListNode MergeTwoLists(ListNode list1, ListNode list2) { + ListNode dummy = new ListNode(); + ListNode curr = dummy; + while (list1 != null && list2 != null) { + if (list1.val <= list2.val) { + curr.next = list1; + list1 = list1.next; + } else { + curr.next = list2; + list2 = list2.next; + } + curr = curr.next; + } + curr.next = list1 == null ? list2 : list1; + return dummy.next; + } +} +``` + +#### Ruby + +```rb +# Definition for singly-linked list. +# class ListNode +# attr_accessor :val, :next +# def initialize(val = 0, _next = nil) +# @val = val +# @next = _next +# end +# end +# @param {ListNode} list1 +# @param {ListNode} list2 +# @return {ListNode} +def merge_two_lists(list1, list2) + dummy = ListNode.new() + cur = dummy + while list1 && list2 + if list1.val <= list2.val + cur.next = list1 + list1 = list1.next + else + cur.next = list2 + list2 = list2.next + end + cur = cur.next + end + cur.next = list1 || list2 + dummy.next +end +``` + #### PHP ```php @@ -618,18 +717,15 @@ var mergeTwoLists = function (list1, list2) { # $this->next = $next; # } # } - class Solution { /** * @param ListNode $list1 * @param ListNode $list2 * @return ListNode */ - function mergeTwoLists($list1, $list2) { $dummy = new ListNode(0); $current = $dummy; - while ($list1 != null && $list2 != null) { if ($list1->val <= $list2->val) { $current->next = $list1; diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.cs b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.cs index f51146a70d7d9..c5cf87486fe07 100644 --- a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.cs +++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.cs @@ -11,23 +11,18 @@ */ public class Solution { public ListNode MergeTwoLists(ListNode list1, ListNode list2) { - ListNode dummy = new ListNode(); - ListNode cur = dummy; - while (list1 != null && list2 != null) - { - if (list1.val <= list2.val) - { - cur.next = list1; - list1 = list1.next; - } - else - { - cur.next = list2; - list2 = list2.next; - } - cur = cur.next; + if (list1 == null) { + return list2; + } + if (list2 == null) { + return list1; + } + if (list1.val <= list2.val) { + list1.next = MergeTwoLists(list1.next, list2); + return list1; + } else { + list2.next = MergeTwoLists(list1, list2.next); + return list2; } - cur.next = list1 == null ? list2 : list1; - return dummy.next; } -} +} \ No newline at end of file diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.php b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.php index 43c1e40cec909..5ba6c289539bf 100644 --- a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.php +++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.php @@ -1,40 +1,34 @@ -# Definition for singly-linked list. -# class ListNode { -# public $val; -# public $next; -# public function __construct($val = 0, $next = null) -# { -# $this->val = $val; -# $this->next = $next; -# } -# } - +/** + * Definition for a singly-linked list. + * class ListNode { + * public $val = 0; + * public $next = null; + * function __construct($val = 0, $next = null) { + * $this->val = $val; + * $this->next = $next; + * } + * } + */ class Solution { + /** * @param ListNode $list1 * @param ListNode $list2 * @return ListNode */ - function mergeTwoLists($list1, $list2) { - $dummy = new ListNode(0); - $current = $dummy; - - while ($list1 != null && $list2 != null) { - if ($list1->val <= $list2->val) { - $current->next = $list1; - $list1 = $list1->next; - } else { - $current->next = $list2; - $list2 = $list2->next; - } - $current = $current->next; + if (is_null($list1)) { + return $list2; + } + if (is_null($list2)) { + return $list1; } - if ($list1 != null) { - $current->next = $list1; - } elseif ($list2 != null) { - $current->next = $list2; + if ($list1->val <= $list2->val) { + $list1->next = $this->mergeTwoLists($list1->next, $list2); + return $list1; + } else { + $list2->next = $this->mergeTwoLists($list1, $list2->next); + return $list2; } - return $dummy->next; } -} +} \ No newline at end of file diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.rb b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.rb index f27273d9fd652..db48f5d196b65 100644 --- a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.rb +++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.rb @@ -10,18 +10,17 @@ # @param {ListNode} list2 # @return {ListNode} def merge_two_lists(list1, list2) - dummy = ListNode.new() - cur = dummy - while list1 && list2 - if list1.val <= list2.val - cur.next = list1 - list1 = list1.next - else - cur.next = list2 - list2 = list2.next - end - cur = cur.next + if list1.nil? + return list2 end - cur.next = list1 || list2 - dummy.next -end + if list2.nil? + return list1 + end + if list1.val <= list2.val + list1.next = merge_two_lists(list1.next, list2) + return list1 + else + list2.next = merge_two_lists(list1, list2.next) + return list2 + end +end \ No newline at end of file diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.cs b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.cs new file mode 100644 index 0000000000000..53d85f2d7f0fa --- /dev/null +++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.cs @@ -0,0 +1,29 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * public int val; + * public ListNode next; + * public ListNode(int val=0, ListNode next=null) { + * this.val = val; + * this.next = next; + * } + * } + */ +public class Solution { + public ListNode MergeTwoLists(ListNode list1, ListNode list2) { + ListNode dummy = new ListNode(); + ListNode curr = dummy; + while (list1 != null && list2 != null) { + if (list1.val <= list2.val) { + curr.next = list1; + list1 = list1.next; + } else { + curr.next = list2; + list2 = list2.next; + } + curr = curr.next; + } + curr.next = list1 == null ? list2 : list1; + return dummy.next; + } +} \ No newline at end of file diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.php b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.php new file mode 100644 index 0000000000000..375be195d3815 --- /dev/null +++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.php @@ -0,0 +1,37 @@ +# Definition for singly-linked list. +# class ListNode { +# public $val; +# public $next; +# public function __construct($val = 0, $next = null) +# { +# $this->val = $val; +# $this->next = $next; +# } +# } +class Solution { + /** + * @param ListNode $list1 + * @param ListNode $list2 + * @return ListNode + */ + function mergeTwoLists($list1, $list2) { + $dummy = new ListNode(0); + $current = $dummy; + while ($list1 != null && $list2 != null) { + if ($list1->val <= $list2->val) { + $current->next = $list1; + $list1 = $list1->next; + } else { + $current->next = $list2; + $list2 = $list2->next; + } + $current = $current->next; + } + if ($list1 != null) { + $current->next = $list1; + } elseif ($list2 != null) { + $current->next = $list2; + } + return $dummy->next; + } +} diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.rb b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.rb new file mode 100644 index 0000000000000..f27273d9fd652 --- /dev/null +++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.rb @@ -0,0 +1,27 @@ +# Definition for singly-linked list. +# class ListNode +# attr_accessor :val, :next +# def initialize(val = 0, _next = nil) +# @val = val +# @next = _next +# end +# end +# @param {ListNode} list1 +# @param {ListNode} list2 +# @return {ListNode} +def merge_two_lists(list1, list2) + dummy = ListNode.new() + cur = dummy + while list1 && list2 + if list1.val <= list2.val + cur.next = list1 + list1 = list1.next + else + cur.next = list2 + list2 = list2.next + end + cur = cur.next + end + cur.next = list1 || list2 + dummy.next +end From 556f53495b22cfe9f9c8ea9a377cc364ebf25620 Mon Sep 17 00:00:00 2001 From: djvelimir <20823832+djvelimir@users.noreply.github.com> Date: Fri, 7 Feb 2025 01:29:51 +0000 Subject: [PATCH 2/2] style: format code and docs with prettier --- solution/0000-0099/0021.Merge Two Sorted Lists/README.md | 1 - solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md | 1 - 2 files changed, 2 deletions(-) diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/README.md b/solution/0000-0099/0021.Merge Two Sorted Lists/README.md index e49417e6ecf55..e38399664ae75 100644 --- a/solution/0000-0099/0021.Merge Two Sorted Lists/README.md +++ b/solution/0000-0099/0021.Merge Two Sorted Lists/README.md @@ -358,7 +358,6 @@ end * } */ class Solution { - /** * @param ListNode $list1 * @param ListNode $list2 diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md b/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md index 24fbfe69fc3b5..5813dda5912a8 100644 --- a/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md +++ b/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md @@ -360,7 +360,6 @@ end * } */ class Solution { - /** * @param ListNode $list1 * @param ListNode $list2