题解 | #反转链表#

反转链表

http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

原地反转:反转的时候,我们最笨的方法思考也要知道当前节点,后继节点和前驱节点。
所以我们先用三个指针来保存到这三个节点。
这题目最终的一步就是转化方向的代码
因为每次反转的时候,我们的三个指针都已经保存了,当前节点,后继节点和前驱节点。
所以,在写代码的时候我们只需要考虑反转后,指针传递顺序即可。

type Node struct{
    val int
    nextNode *Node
}

func Reverse(node *Node) *Node {
    // 判断边界
    if node == nil ||node.nextNode ==nil {
        return node
    }
    // 初始化三个指针
    var pre *Node //声明不初始化,则pre是nil
    cur := node  //很明显,给的指针在头节点也是存数数据的。
    next := node.nextNode
    for next != nil {
        // 直接反转当前链表
        cur.nextNode = pre
        // 注意链表前进顺序,从pre往next依次前进
        pre = cur
        cur = next
        next = next.nextNode
    }
    // 因为反转操作都是在循环中,当next指针是空的时候,最后一个节点实际上是没有反转的,所以在最外层我们讲最后一个节点反转即可
    cur.nextNode = pre
    return cur
}

全部评论

相关推荐

xdm怎么说 要被拷打了 担心是KPI
丹田:面就完了,就当日薪四位数的大佬免费给给你面试。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 15:19
简历上能写3个月吗?
码农索隆:大胆写,主要你能把实习经历包装好,可以看一下我这篇帖子https://www.nowcoder.com/share/jump/4888395581180798063
点赞 评论 收藏
分享
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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