题解 | #反转链表#

反转链表

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

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    # 返回ListNode
    def ReverseList(self, pHead):
        # write code here
        pre = None
        head = pHead
        while head:
            temp = head.next
            head.next = pre 
            pre = head 
            head = temp 
        return pre 

方便自己理解 以前对链表的理解很差

假设 链表为 1->2->3->4->null 空就是链表的尾
obj: 4->3->2->1->null
那么逻辑是
首先设定待反转链表的尾 pre = none
head 代表一个动态的表头 逐步取下一次链表的值
然后利用temp保存 head.next 第一次迭代head为1 temp 为2 原始链表中是1->2
现在我们需要翻转 即 令head.next = pre 实现 1->none
但此时链表切断了 变成了 1->none 2->3->4
所以我们要移动指针,另pre = head 也就是pre从none 变成1 下一次即可完成2->1的链接
此外另head = next 也就是说 把指针移动到后面仍然链接的链表上
这样执行下一次循环 则实现 把2->3 转变为 2->1->none
然后再次迭代
直到最后一次 head 变成了none 而pre变成了4 则pre是新的链表的表头
完成翻转

全部评论
python3的next方法不能这样直接用吧?我本地跑报'set' object has no attribute 'next'
1 回复 分享
发布于 2021-12-13 17:40
返回最后的表头不是应该是4吗,出来的为什么是{4,3,2,1}?
点赞 回复 分享
发布于 2022-11-04 13:37 浙江
打印代码怎么写呢?
点赞 回复 分享
发布于 2022-03-14 23:10

相关推荐

11-29 19:59
已编辑
沧州师范学院 前端工程师
smile丶snow:学校可以放在最后面。只保留一个专业和本科就行了。主修课程什么可以去掉。一个项目太少了可以去github看看再加一个
点赞 评论 收藏
分享
评论
77
1
分享

创作者周榜

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