反转链表-双指针

反转链表

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 的值

全部评论

相关推荐

01-15 19:59
中山大学 C++
牛客60887332...:你这是人写出来的? 本科标到硕士后面 留那么多空给 hr 填?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务