15 tháng 9 năm 2019 Công nghệ thông tin
1. Mô tả bài toán Cho một danh sách liên kết và một giá trị x, hãy phân chia danh sách này sao cho các nút có giá trị nhỏ hơn sam86.vip 2023 x xuất win win - game bài hiện trước các nút có giá trị lớn hơn hoặc bằng x. Đồng thời, bạn cần đảm bảo rằng trật tự ban đầu của các phần tử trong mỗi nhóm được giữ nguyên.
Ví dụ:
Đầu vào: head = 1->4->3->2->5->2, x = 3
Đầu ra: 1->2->2->4->3->5
Nguồn gốc bài toán: LeetCode
2. Cách tiếp cận giải quyết Chúng ta sẽ sử dụng hai biến danh sách liên kết là left và right. Duyệt qua danh sách liên kết ban đầu, với mỗi nút, nếu giá trị của nó nhỏ hơn x, chúng ta sẽ thêm nút đó vào cuối danh sách left; ngược lại, thêm vào danh sách right. Cuối cùng, nối danh sách left và right lại với nhau và trả về danh sách kết quả.
3. Mã nguồn thực p88 nhà cái thi bằng Golang
func partition(head *ListNode, x int) *ListNode {
// Kiểm tra trường hợp danh sách rỗng hoặc chỉ có một phần tử
if head == nil || head.Next == nil {
return head
}
// Khởi tạo các con trỏ cho danh sách left và right
var left, right, p, q *ListNode
// Duyệt qua từng phần tử của danh sách ban đầu
for head != nil {
if head.Val < x {
// Nếu phần tử nhỏ hơn x, thêm vào danh sách left
if left == nil {
left = &ListNode{Val: head.Val}
p = left
} else {
p.Next = &ListNode{Val: head.Val}
p = p.Next
}
} else {
// Ngược lại, thêm vào danh sách right
if right == nil {
right = &ListNode{Val: head.Val}
q = right
} else {
q.Next = &ListNode{Val: head.Val}
q = q.Next
}
}
head = head.Next
}
// Nối hai danh sách left và right lại với nhau
if left == nil {
return right
}
if right != nil {
p.Next = right
}
return left
}
#Golang #Thuật_toán