zoukankan      html  css  js  c++  java
  • 剑指offer——python【第15题】反转链表

    题目描述

    翻转一个链表

    样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null

    思路

    一种比较简单的方法是用“摘除法”。就是先新建一个空节点,然后遍历整个链表,依次令遍历到的节点指向新建链表的头节点

    设原来的链表是1->2->3,步骤是这样的:

    1. 新建空节点:None
    2. 1->None
    3. 2->1->None
    4. 3->2->1->None

    解答

    # -*- coding:utf-8 -*-
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    class Solution:
        # 返回ListNode
        def ReverseList(self, pHead):
            if not pHead or not pHead.next:
                return pHead
            newHead = None
            while pHead is not None:
                temp = pHead.next
                pHead.next = newHead
                newHead = pHead
                pHead = temp
            return newHead

    详细复述一下代码:

    在第一轮循环里:首先定义新链表头节点newHead,然后保存原头节点的下一个节点(2)为temp,然后让原头节点(1)指向newHead(空),此时1和2的链条断了;接着让newHead变成了原头

    节点(1),最后把原头节点变成了temp(2),看看这轮下来有什么改变,其实是让newHead变成了1,并且指向了None,而pHead变成了2;

    接着第二轮循环,可想而知这一轮的目的是让newHead变成2,并且指向1,让pHead变成3

    最后的结果就是newHead变成了3,3->2->1->None依次串起来了(最后那个None串不串都一样)

    当然还有其他方法,挖个坑,下次补上!

    人生苦短,何不用python
  • 相关阅读:
    nginx原理及常用配置
    课程作业03-1
    Java动手动脑02
    Java课程作业02
    java课堂测试2
    Java验证码程序
    课程作业02-2
    课程作业02-1
    课程作业01
    《大道至简》第一章伪代码
  • 原文地址:https://www.cnblogs.com/yqpy/p/9547099.html
Copyright © 2011-2022 走看看