反转链表-双指针

反转链表

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
}

解决思路:

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

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务