题目描述:
反转一个单链表。
示例:
输入: 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 }