反转链表

题目描述:

反转一个单链表。

示例:

输入: 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
}

  地址:https://mp.weixin.qq.com/s/IVI1Wctf5-0u7dvPPqxQnw

 

posted @ 2020-09-02 09:36  small_lei_it  阅读(206)  评论(0编辑  收藏  举报