1. 找到一个数组中第二大的数

思路: 定义一个最大值和第二大值变量,遍历一次数组。需要注意的是最大值可能有多个。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func getMax(arr []int) int {<!-- -->
    // 初始化
    maxNum := arr[0]
    secondMaxNum := arr[1]
    if maxNum < secondMaxNum {<!-- -->
        maxNum, secondMaxNum = secondMaxNum, maxNum
    }
    for i := 0; i < len(arr); i++ {<!-- -->
        if maxNum < arr[i] {<!-- -->
            secondMaxNum = maxNum
            maxNum = arr[i]
        } else if secondMaxNum < arr[i] && arr[i] != maxNum {<!-- -->
            secondMaxNum = arr[i]
        }
    }
    return secondMaxNum
}

2. 反转链表

思路: 定义一个pre空指针,遍历链表,当前节点cur指向pre。相当于把链表指针全部反向的过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
type Node struct {<!-- -->
    Value int
    Next  *Node
}

func ReserveList(head *Node) *Node {<!-- -->
    var pre *Node
    cur := head
    for cur != nil {<!-- -->
        cur, pre, cur.Next = cur.Next, cur, pre
    }
    return pre
}