单链表的翻转python

【Linux】superset的安装、以及报错的坑 今日待完成。。。 就是报错的海洋 阅读详情

反转链表
输入一个链表,反转链表后,输出新链表的表头。
笔记:看到第一思路是用list做,结果一直出错,看了高分回答不太理解,找了资料,直到找到最详细的图解博客,感谢大神~
https://blog.youkuaiyun.com/feliciafay/article/details/6841115
https://blog.youkuaiyun.com/The__Apollo/article/details/78769400
如何把一个单链表进行反转?

方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。

方法2:使用3个指针遍历单链表,逐个链接点进行反转。

方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。

方法4: 递归(相信我们都熟悉的一点是,对于树的大部分问题,基本可以考虑用递归来解决。但是我们不太熟悉的一点是,对于单链表的一些问题,也可以使用递归。可以认为单链表是一颗永远只有左(右)子树的树,因此可以考虑用递归来解决。或者说,因为单链表本身的结构也有自相似的特点,所以可以考虑用递归来解决)

方法1:浪费空间
是比较容易想到的,但是总是出错,目前都没找到原因,代码先放在这里,后面熟练了再改改看~
错误的代码

# -*- 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
        l = []
        while pHead != None:
            l.append(pHead)
            pHead = pHead.next
        res = {}
        i = len[l] -1
        while i>= 0:
            res{l[i]} = i
            i -= 1
        return res

方法2:3个指针遍历单链表,感谢大神的详细讲解

使用p和q两个指针配合工作,使得两个节点间的指向反向,同时用r记录剩下的链表。
p = head;

q = head->next;
在这里插入图片描述
head->next = NULL;
在这里插入图片描述
现在进入循环体,这是第一次循环。

r = q->next;

q->next = p;
在这里插入图片描述
p = q;
q =r;
在这里插入图片描述
第二次循环。

r = q->next
在这里插入图片描述
q->next = p;
在这里插入图片描述
p = q;
在这里插入图片描述
q = r
在这里插入图片描述
第三次循环。。。。。
Python代码:

# -*- 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
         
 
        # write code here
        if not pHead or not pHead.next:
            return pHead
          
        last = None
          
        while pHead:
            tmp = pHead.next
            pHead.next = last
            last = pHead
            pHead = tmp
        return last

**方法三:**比较好容易理解所有不加上图了,但是代码自己用python还是写不出来,倒了一下,能读懂代码,菜是原罪呀~
代码如下:p一直向后移动,直到末尾~

def func2(head):
    p = head.next
    while p.next:
        q = p.next
        p.next = q.next
        head.next = q
        q.next = p

    p.next = head #形成环形
    head = head.next
    p.next.next = None #断开连接
    return head

方法4:递归
发现大部分问题都可以从递归角度想想,所以这道题目也从递归角度想了想。

现在需要把A->B->C->D进行反转,
可以先假设B->C->D已经反转好,已经成为了D->C->B,那么接下来要做的事情就是将D->C->B看成一个整体,让这个整体的next指向A,所以问题转化了反转B->C->D。那么,
可以先假设C->D已经反转好,已经成为了D->C,那么接下来要做的事情就是将D->C看成一个整体,让这个整体的next指向B,所以问题转化了反转C->D。那么,
可以先假设D(其实是D->NULL)已经反转好,已经成为了D(其实是head->D),那么接下来要做的事情就是将D(其实是head->D)看成一个整体,让这个整体的next指向C,所以问题转化了反转D。
上面这个过程就是递归的过程,这其中最麻烦的问题是,如果保留新链表的head指针呢?想到了两个办法。

/ 递归版的第一种实现,借助类的成员变量m_phead来表示新链表的头指针。
第二个办法是,增加一个引用型参数 new_head,它用来保存新链表的头指针。
笔记:有些没怎么看懂的,记下来后面继续看~

def func3(head):
    if head.next == None:
        return head
    new_head = func3(head.next)
    head.next.next = head
    head.next = None
    return new_head
链表-翻转链表(python) 【代码】链表-翻转链表(python) 阅读详情

相关推荐

linux下autocad完美替代品bricscad的安装运行

前言 在Linux平台下,能完美兼容.dwg文件的软件并不多。 虽然国产的中望和浩辰为适配uos操作系统,近期都推出了linux版本,但目前好像还没有对应的破姐流出。(如果有的话请私信我或留下评论) 然而有了这一款源自比利时的软件——bricscad,linux下查看和编辑.dwg文件再也不是噩梦了! 安装pj 资源链接:https://pan.baidu.com/s/1dC7zarlqwuO5fa4CBL_KGQ 提取码:24j6 1.下载对应的压缩包,解压并安装其中对应的deb或rpm软件包。 2.在C

weixin_35259117的博客 4486

单链表反转python实现

单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可。 代码: class ListNode: def __init__(self,x): self.val=x; self.next=None; def nonrecurse(he...

零丁若叹 3万+

AppFlow实战:零代码将Dify接入企业微信的完整指南

本文提供了一份零代码将Dify AI应用接入企业微信的完整实战指南。通过使用阿里云AppFlow作为无代码连接器,详细讲解了从获取Dify API密钥、创建企业微信应用到配置自动化流程的全过程,帮助团队快速将AI能力无缝融入日常协作,大幅提升工作效率。

php55的博客 808

【Python数据结构】反转链表的方法

反转链表是指改变单链表中节点之间的连接关系,使得原本的正向顺序变为反向顺序。以下是反转单链表的常见方法:迭代法反转链表的流程:使用三个指针,通常命名为 prev、current 和 next:下面是具体的代码实现: 二. 递归法 设定递归函数,传入当前节点作为参数: 当前节点为空或只有一个节点时,直接返回该节点(此时无需反转); 否则,递归调用函数处理下一个节点,得到反转后的下一个节点; 然后修改当前节点的 next 指针,使之指向反转后返回的节点; 最后返回当前节点作为新的子链表的头节点。 请注

qq_42533357的博客 2801

Python广度优先搜索BFS - 蓝桥13届省赛污染海域

请问这片N * M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该块海域上下左右被已污染的海域包围,且N * M以外的海域都为已被污染的海域)有一片海域划分为N * M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示)。第二行开始输入N行,每行M个数字(数字只能为1或者0,1表示没被污染的海域,0表示已被污染的海域)这块4 * 5的海域,有3块海域(绿色)没被污染,因为每一块的上下左右都被污染的海域包围。输出一个整数,表示N * M的海域中有几块是没被污染的独立海域。

m0_69865359的博客 270

unity 在透明物体上投射阴影

unity版本:2019.4.16 创建一个shader,代码如下: Shader "ChuckLee/ARShadow" { Properties { _ShadowColor("Shadow Color", Color) = (0.1, 0.1, 0.1, 0.53) } SubShader { Tags{ "RenderType" = "Transparent" "Queue" = "Geometry+1" } Blend SrcAlpha OneMinusSrcAlph

Abel02的博客 2953

如何使用 Python 实现链表的反转?

这两种方法都可以有效地反转链表,选择哪种方法取决于你的偏好和具体的应用场景。迭代方法通常更节省空间,因为它不需要额外的栈空间,而递归方法在代码上更为简洁,但需要注意递归深度的问题。在Python中实现链表的反转可以通过几种不同的方法。递归方法是通过递归调用来反转链表,每次递归反转一个节点,直到链表的末尾。迭代方法是通过遍历链表,逐个节点地改变其指向来实现反转的。# 创建链表 1 -> 2 -> 3 -> None。# 创建链表 1 -> 2 -> 3 -> None。# 打印反转后的链表。

silver687的博客 837

11.Labview实现用户界面切换的几种方式---通过VI间相互调用

本文介绍了界面切换的几种方式,分别是重入和引用①重入方式可以通过调用子VI的方式打开被调用的界面,往往应用于弹窗等的设置程序。②引用方式分两种,一种是打开引用,一种是静态引用。区别在于打开引用需要设置被打开VI的目标地址,静态引用仅需在引用时绑定VI的位置即可。③推荐使用静态引用的方式切换界面。④使用引用打开界面时,需通过属性节点和调用节点来设置程序的状态。更多内容欢迎大家补充和留言讨论~本文介绍了GUI界面设计相关的程序,更多相关文章后续持续更新,请关注作者不迷路~本期就到这里,再见~

关注我,更多技术问题欢迎私聊~ 9552

python实现单链表的翻转

单链表的翻转操作是指将链表中节点的指针方向反转,使得原先指向下一个节点的指针指向前一个节点,最终形成一个逆序的链表。python实现单链表的翻转实现思路:从头指针开始遍历,先获取头指针的下一个结点保留,然后调整头指针的指向,然后再把之前保留的节点赋给头结点,继续遍历。

liulanba的博客 7153

怎么调用onenet平台的API从而读取我们的设备数据和下发命令,做到控制开关

怎么调用onenet平台的API从而读取我们的设备数据和下发命令,做到控制开关 1、首先是怎么读取数据 读取的API是:http://api.heclouds.com/devices/datapoints?devIds=629063002 其中devids这个指的是你的设备ID 然后在我们的headers里面添加一些必要参数,就可以调用了 其中api-key的是你产品里面的master-apikey 把我们的参数写好就可以调用了,选择get方式,点击发送 这个value就是我们需要获取到的参数值了,

zyh960的博客 2万+

单片机应用案例:ESP32 搭配 BH1750 光强传感器和 Web 服务器

在该应用案例中,我们将使用 ESP32 开发板作为主控制器,BH1750 光强传感器用于采集环境光强度数据,并通过 Web 服务器展示采集到的数据。步骤一:购买材料步骤二:连接硬件步骤三:编写代码我们将使用 Arduino IDE 编写代码,以下是主要代码:// WiFi 设置const char* ssid = “你的 WiFi 名称”;const char* password = “密码”;// Web 服务器实例// BH1750 实例// 获取当前光强度数据。

RlDart的博客 813

python链表逆序实例_python 单链表翻转的简单示例

这篇文章主要为大家详细介绍了python 单链表翻转的简单示例,具有一定的参考价值,可以用来参考一下。感兴趣python 单链表翻转的简单示例的小伙伴,下面一起跟随512笔记的小编罗X来看看吧。# 512笔记网 (www.512pic.com)#!/usr/bin/env python#coding = utf-8class Node:def __init__(self,data=None,ne...

weixin_39536806的博客 234

Ambari 安装部署教程(手把手教学)【超级详细】

本文为读者提供了一套超详细的 Apache Ambari 安装部署教程,采用手把手教学方式,适合初学者及大数据运维人员。内容涵盖前期准备、环境配置、Ambari Server 与 Agent 安装、集群初始化配置、常见问题排查等全流程操作,确保用户能够顺利搭建稳定的 Hadoop 大数据平台管理系统。

Five的博客 1万+

用python介绍4种常用的单链表翻转的方法

这里给出了4种4种常用的单链表翻转的方法,分别是: 开辟辅助数组,新建表头反转,就地反转,递归反转 # -*- coding: utf-8 -*- ''' 链表逆序 ''' class ListNode: def __init__(self,x): self.val=x self.next=None ''' 第一种方...

weixin_30363817的博客 69

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python实现单链表翻转

1.迭代的方法实现单链表翻转 class Node: def __init__(self,val): self.head=val self.next=null Class Reverse_singlelinklist: def reverse(self,head): last_node=None #如果当前列表为空列表,则返回头结点. if not head or not(head.next):

opencv_fjc的博客 595

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

用python介绍4种常用的单链表翻转的方法。

python,单链表反转,LeetCode

u011452172的博客 6853

python链表翻转_用python介绍4种常用的单链表翻转的方法

这里给出了4种4种常用的单链表翻转的方法,分别是:开辟辅助数组,新建表头反转,就地反转,递归反转# -*- coding: utf-8 -*-'''链表逆序'''class ListNode:def __init__(self,x):self.val=xself.next=None'''第一种方法:对于一个长度为n的单链表head,用一个大小为n的数组arr储存从单链表从头到尾遍历的所有元素,在从...

weixin_39618574的博客 267

python链表定长翻转_用python介绍4种常用的单链表翻转的方法

这里给出了4种4种常用的单链表翻转的方法,分别是:开辟辅助数组,新建表头反转,就地反转,递归反转# -*- coding: utf-8 -*-'''链表逆序'''class ListNode:def __init__(self,x):self.val=xself.next=None'''第一种方法:对于一个长度为n的单链表head,用一个大小为n的数组arr储存从单链表从头到尾遍历的所有元素,在从...

weixin_39869959的博客 72

python单链表逆序_用python介绍4种常用的单链表翻转的方法小结

如何把一个单链表进行反转?方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。方法2:使用3个指针遍历单链表,逐个链接点进行反转。方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。方法4: 递归(相信我们都熟悉的一点是,对于树的大部分问题,基本可以考虑用递归来解决。但是我们不太熟悉的一点是,对于单链表的一些问题,也可以使用递归...

weixin_39938746的博客 226

python 实现单链表翻转的几种常用方法

第一种方法:对于一个长度为n的单链表head,用一个大小为n的数组arr储存从单链表从头到尾遍历的所有元素,在从arr尾到头读取元素简历一个新的单链表时间消耗O(n),空间消耗O(n) # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(obje.

neo_lcx的博客 790

python实现单链表翻转

题目描述: 翻转一个链表 您在真实的面试中是否遇到过这个题? Yes 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 挑战 在原地一次翻转完成 题目分析: 在原地一次翻转完成 循环head链表,将链表中的...

weixin_30249203的博客 175

python 链表翻转_python实现单链表翻转

题目描述:翻转一个链表您在真实的面试中是否遇到过这个题?Yes样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null挑战在原地一次翻转完成题目分析:在原地一次翻转完成循环head链表,将链表中的元素从表头依次取出指向新链表即可。源码:"""Definition of ListNodeclass ListNode(object):def __init__(self,...

weixin_40005454的博客 80

python链表定长翻转_python实现单链表翻转

题目描述:翻转一个链表您在真实的面试中是否遇到过这个题?Yes样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null挑战在原地一次翻转完成题目分析:在原地一次翻转完成循环head链表,将链表中的元素从表头依次取出指向新链表即可。源码:"""Definition of ListNodeclass ListNode(object):...

weixin_39620653的博客 53

Python之单链表的翻转

给定一个链表,将该链表翻转,并返回头结点 #链表的翻转 class Node: def __init__(self,val=None): self.val = val self.next = None class LinkList: def __init__(self): self.head = Node() def fanz...

qq_42998409的博客 296

python 单链表&翻转链表

class Node: def __init__(self, value=None, next=None): self.value = value self.next = next # Please write your code here class LinkList: def __init__(self): self.head = None self.length = 0 self.tail = N

捕数的杰哥的博客 650
上一篇: 剑指offer:20、数组中的逆序对;21、连续子数组的最大和;22、整数中1出现的次数
下一篇: 0415:时间复杂度和空间复杂度详解+剑指offer:29、数组中只出现一次的数字
Sulayman600
博客等级 码龄10年 13粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值