Compare commits

..
2 Commits
Author SHA1 Message Date
li_chx f19f1f5e85 148. 排序链表 2026-08-13 20:57:24 +08:00
li_chx 4ee6823943 92. 反转链表 II 2026-08-12 21:58:10 +08:00
3 changed files with 81 additions and 39 deletions
+3
View File
@@ -0,0 +1,3 @@
module lichx.top/go-test
go 1.25.0
+27
View File
@@ -0,0 +1,27 @@
package main
import "fmt"
type ListNode struct {
Val int
Next *ListNode
}
func makeLink(arr []int) *ListNode {
if len(arr) == 0 {
return nil
}
head := &ListNode{}
cur := head
for _, v := range arr {
cur.Next = &ListNode{Val: v}
cur = cur.Next
}
return head.Next
}
func checkLink(head *ListNode) {
for head != nil {
fmt.Println(head.Val)
head = head.Next
}
}
+49 -37
View File
@@ -1,50 +1,62 @@
package main package main
import "fmt" func conquerAndSort(head *ListNode, end *ListNode) *ListNode {
if head == nil || head == end || head.Next == nil {
func isMapEqual(a map[uint8]int, b map[uint8]int) bool { return head
for k, v := range a {
if val, ok := b[k]; ok {
if val != v {
return false
} }
if head.Next == end {
if end != nil {
if head.Val > end.Val {
head.Val, end.Val = end.Val, head.Val
}
}
return head
}
if head.Next.Next == end {
if head.Val > head.Next.Val {
head.Next.Val, head.Val = head.Val, head.Next.Val
}
return head
}
slow, fast := head, head
for fast.Next != nil && fast.Next.Next != nil {
slow = slow.Next
fast = fast.Next.Next
}
lastSlow := slow
slow = slow.Next
lastSlow.Next = nil
a := conquerAndSort(head, nil)
b := conquerAndSort(slow, end)
if a.Val > b.Val {
a, b = b, a
}
// a Val < b Val
head = a
cur := a
a = a.Next
for a != nil && b != nil {
if a.Val > b.Val {
cur.Next = b
b = b.Next
} else { } else {
return false cur.Next = a
a = a.Next
} }
cur = cur.Next
} }
for k, v := range b { if a == nil {
if val, ok := a[k]; ok { cur.Next = b
if val != v {
return false
}
} else { } else {
return false cur.Next = a
} }
return head
} }
return true func sortList(head *ListNode) *ListNode {
} return conquerAndSort(head, nil)
func checkStrings(s1 string, s2 string) bool {
mp1 := make(map[uint8]int)
mp2 := make(map[uint8]int)
for i := 0; i < len(s1); i += 2 {
mp1[s1[i]]++
mp2[s2[i]]++
}
if !isMapEqual(mp1, mp2) {
return false
}
mp1 = make(map[uint8]int)
mp2 = make(map[uint8]int)
for i := 1; i < len(s1); i += 2 {
mp1[s1[i]]++
mp2[s2[i]]++
}
if !isMapEqual(mp1, mp2) {
return false
}
return true
} }
func main() { func main() {
fmt.Printf("%v", checkStrings("abcdba", "cabdab")) arr := []int{-1, 5, 3, 4, 0}
checkLink(sortList(makeLink(arr)))
} }