循环是常用的流程环节。
1 //链表控制 2 //链表控制的优点,是通过指针来定位,那么循环的过程中,即是可变的,实时性很强。 3 var tmp *datastruct.ListNode 4 tmp = &datastruct.ListNode{Val: -1, Next: nil} 5 6 i := 0 7 for node := tmp; node != nil; node = node.Next { 8 if i >= 10 { 9 break 10 } 11 12 node.Next = &datastruct.ListNode{ 13 Val: i, 14 Next: nil, 15 } 16 17 i++ 18 } 19 20 for node := tmp; node != nil; node = node.Next { 21 fmt.Println(node) 22 } 23 24 //循环通过数据来控制 25 //由于range的时候 完成了值copy,所以range后面的arr长度为1,那么中间过程代码对于arr的追增,依旧长度为1. 26 //所以只会循环一次 27 28 i = 0 29 arr := []int{-1} 30 for _, val := range arr { 31 fmt.Println(val) 32 if i >= 10 { 33 break 34 } 35 arr = append(arr, i) 36 37 fmt.Println(val) 38 i++ 39 } 40 41 //那么数组如何动态控制循环呢? 类似死循环的技巧,可以实现 42 i = 0 43 arr = []int{-1} 44 for len(arr) > 0 { 45 arr = arr[1:] 46 if i >= 10 { 47 break 48 } 49 50 arr = append(arr, i) 51 52 fmt.Println(i) 53 54 i++ 55 }
可变循环的需求: 就是通过边界上的设定,规避语言的限制(或者其他限制),从而更符合场景的实现。
循环也是很重要的流程环节。