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
  • 相关阅读:
    unity3d连接Sqlite并打包发布Android
    EasyTouch中虚拟摇杆的使用EasyJoystick
    在屏幕拖拽3D物体移动
    LineRenderer组建实现激光效果
    unity3d对象池的使用
    自动寻路方案
    贪吃蛇方案
    unity3d射线控制移动
    文件压缩(读取文件优化)
    [LeetCode] 33. 搜索旋转排序数组 ☆☆☆(二分查找)
  • 原文地址:https://www.cnblogs.com/yqpy/p/9547099.html
Copyright © 2011-2022 走看看