package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 
 * @param pHead ListNode类 
 * @return ListNode类
*/
func ReverseList( pHead *ListNode ) *ListNode {
    // write code here
    if pHead == nil {
        return nil
    }
    pa := pHead
    pb := pa.Next
    pa.Next = nil

    for pb != nil {
        ptmp := pb.Next
        pb.Next = pa
        pa = pb
        pb = ptmp
    }
    return pa
}

解决思路:

  1. 使用双指针往后移动,在移动的过程中将 pb.Next 指向 pa,即反转前后两个元素之间的指向关系
  2. 双指针往后移动,即更新 pa 和 pb 的值