反转链表-双指针
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=295&tqId=23286&ru=%2Fpractice%2F75e878df47f24fdc9dc3e400ec6058ca&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj
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
}
解决思路:
- 使用双指针往后移动,在移动的过程中将 pb.Next 指向 pa,即反转前后两个元素之间的指向关系
- 双指针往后移动,即更新 pa 和 pb 的值

