From 3bce899398b4ccae2820efda610f55746a749416 Mon Sep 17 00:00:00 2001 From: nite Date: Sat, 13 Jun 2026 04:08:10 +1000 Subject: [PATCH] u --- top-100-liked/21/21_test.go | 2 ++ top-100-liked/22/22_test.go | 21 ++++++++++++++ top-100-liked/23/23_test.go | 55 +++++++++++++++++++++++++++++++++++ top-100-liked/24/24_test.go | 44 ++++++++++++++++++++++++++++ top-100-liked/25/25_test.go | 58 +++++++++++++++++++++++++++++++++++++ 5 files changed, 180 insertions(+) create mode 100644 top-100-liked/22/22_test.go create mode 100644 top-100-liked/23/23_test.go create mode 100644 top-100-liked/24/24_test.go create mode 100644 top-100-liked/25/25_test.go diff --git a/top-100-liked/21/21_test.go b/top-100-liked/21/21_test.go index fb42bd6..e426e93 100644 --- a/top-100-liked/21/21_test.go +++ b/top-100-liked/21/21_test.go @@ -1,5 +1,7 @@ package top100liked +// https://leetcode.cn/problems/search-a-2d-matrix-ii/?envType=study-plan-v2&envId=top-100-liked + import ( "fmt" "testing" diff --git a/top-100-liked/22/22_test.go b/top-100-liked/22/22_test.go new file mode 100644 index 0000000..9611016 --- /dev/null +++ b/top-100-liked/22/22_test.go @@ -0,0 +1,21 @@ +package top100liked + +// https://leetcode.cn/problems/intersection-of-two-linked-lists/?envType=study-plan-v2&envId=top-100-liked + +type ListNode struct { + Val int + Next *ListNode +} + +func getIntersectionNode(headA, headB *ListNode) *ListNode { + vis := map[*ListNode]bool{} + for tmp := headA; tmp != nil; tmp = tmp.Next { + vis[tmp] = true + } + for tmp := headB; tmp != nil; tmp = tmp.Next { + if vis[tmp] { + return tmp + } + } + return nil +} diff --git a/top-100-liked/23/23_test.go b/top-100-liked/23/23_test.go new file mode 100644 index 0000000..7d5d27a --- /dev/null +++ b/top-100-liked/23/23_test.go @@ -0,0 +1,55 @@ +package top100liked + +import ( + "fmt" + "testing" +) + +// https://leetcode.cn/problems/reverse-linked-list/description/?envType=study-plan-v2&envId=top-100-liked + +type ListNode struct { + Val int + Next *ListNode +} + +func reverseList(head *ListNode) *ListNode { + if head == nil { + return nil + } + var last *ListNode = nil + h := head + for h.Next != nil { + tmp := h.Next + h.Next = last + last = h + h = tmp + } + h.Next = last + return h +} + +func TestS23(t *testing.T) { + input := ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 5, + Next: nil, + }, + }, + }, + }, + } + output := reverseList(&input) + + for output.Next != nil { + fmt.Println(output.Val) + output = output.Next + } + fmt.Println(output.Val) +} diff --git a/top-100-liked/24/24_test.go b/top-100-liked/24/24_test.go new file mode 100644 index 0000000..6666692 --- /dev/null +++ b/top-100-liked/24/24_test.go @@ -0,0 +1,44 @@ +package top100liked + +import ( + "fmt" + "testing" +) + +// https://leetcode.cn/problems/palindrome-linked-list/description/?envType=study-plan-v2&envId=top-100-liked + +type ListNode struct { + Val int + Next *ListNode +} + +func isPalindrome(head *ListNode) bool { + vals := []int{} + for ; head != nil; head = head.Next { + vals = append(vals, head.Val) + } + n := len(vals) + for i, v := range vals[:n/2] { + if v != vals[n-1-i] { + return false + } + } + return true +} + +func TestS24(t *testing.T) { + input := ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 1, + Next: nil, + }, + }, + }, + } + fmt.Println(isPalindrome(&input)) +} diff --git a/top-100-liked/25/25_test.go b/top-100-liked/25/25_test.go new file mode 100644 index 0000000..7c1ba07 --- /dev/null +++ b/top-100-liked/25/25_test.go @@ -0,0 +1,58 @@ +package top100liked + +import ( + "fmt" + "testing" +) + +// https://leetcode.cn/problems/linked-list-cycle/description/?envType=study-plan-v2&envId=top-100-liked + +type ListNode struct { + Val int + Next *ListNode +} + +// func hasCycle(head *ListNode) bool { +// _map := make(map[*ListNode]bool) +// for head != nil { +// if _map[head] { +// return true +// } +// _map[head] = true +// head = head.Next +// } +// return false +// } + +func hasCycle(head *ListNode) bool { + if head == nil || head.Next == nil { + return false + } + slow, fast := head, head.Next + for fast != slow { + if fast == nil || fast.Next == nil { + return false + } + slow = slow.Next + fast = fast.Next.Next + } + return true +} + +func TestS24(t *testing.T) { + input := &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 0, + Next: &ListNode{ + Val: -4, + Next: nil, + }, + }, + }, + } + input.Next.Next.Next.Next = input.Next + fmt.Println(hasCycle(input)) +}