1.如何判断两个无环单链表有没有交叉点
解:
如果有交点,那就是交点后的数据一致,那就是呈现y型
取两者的短链为参考链,快进到一样长度(初始指针不动,等待len1-len2后再动),如果ptra = ptrb就是有共同节点(排除nil)
2.如何判断一个单链表有没有环, 并找出入环点
解:
三指针,ptr1以一格一跳;ptr2以两格一跳,
如果有环,必定在ptr1跑完所有节点前和ptr2相遇,
如果有相遇,这时ptr3指向链表头,同时移动ptr1和ptr3,相遇点即为入环点
时间复杂On;空间O1
3.快排
package main
import (
"fmt"
)
func quicksort_1(arry []int, start, end int, f func(int, int)(bool)){
if start < end {
hartpart := (start + end) / 2
a,b,s := start, end, arry[hartpart]
for a < b{
for f(arry[a], s) { a++ }
for f(s, arry[b]) { b-- }
arry[a], arry[b] = arry[b], arry[a]
a++
b--
}
if start < b{ quicksort_1(arry, start, b, f)}
if a < end{ quicksort_1(arry, a, end, f) }
}
}
func main(){
var arry = []int{19,8,16,15,23,34,6,0,1,0,2,9,7}
quicksort_1(arry,0,len(arry) -1,func(a,b int)bool{return a > b})
fmt.Print(arry)
}