剑指 Offer 06. 从尾到头打印链表
// 思路1,辅助+反转
// 思路2: 递归一次性
func reversePrint(head *ListNode) []int {
ans := make([]int,0)
cur := head
for cur != nil {
ans = append(ans, cur.Val)
cur = cur.Next
}
for i:=0;i<len(ans)/2;i++{
ans[i],ans[len(ans)-1-i] = ans[len(ans)-1-i],ans[i]
}
return ans
}
// 思路2
1,3,2
[]int{},head.Val
[2]int{},head.Val
[2,3]int{},head.Val
[2,3,1]
func reversePrint(head *ListNode) []int {
if head == nil {
return []int{}
}
return append(reversePrint(head.Next), head.Val)
}
剑指 Offer 24. 反转链表
func reverseList(head *ListNode) *ListNode {
var prevNode *ListNode
cur := head
for cur != nil {
temp := cur.Next
cur.Next = prevNode
prevNode = cur
cur = temp
}
return prevNode
}
剑指 Offer 35. 复杂链表的复制
func copyRandomList(head *Node) *Node {
hasMap := make(map[*Node]*Node,0)
for i:=head;i!=nil;i=i.Next{
x := &Node{Val:i.Val}
hasMap[i] = x
}
for i:=head;i!=nil;i=i.Next{
t := hasMap[i]
t.Next = hasMap[i.Next]
t.Random = hasMap[i.Random]
}
return hasMap[head]
}