题目描述:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
解题思路:
双指针迭代
两个指针,第一个指针叫 prev,最初是指向 null 的。第二个指针是 head 本身,然后不断遍历 head。每次迭代到 head,都将 head 的 next 指向 prev,然后 prev 和 head 移动一位。都迭代完了(head 变成 null 了),prev 就是最后一个节点了。动画演示如下:

代码:
//go
func reverseList(head *ListNode) *ListNode {
var prev *ListNode
for head != nil {
//反转链表,注意顺序!
next := head.Next // 先保存下一个节点,不然后面找不着
head.Next = prev // 当前节点指向上一个节点
prev = head
head = next
// 语法性质可简写如下
// head.Next, head, prev = prev, head.Next, head
}
return prev
}