技术标签: 递归 python 单链表 反转 python学习 循环 数据结构
单链表的反转可以使用循环,也可以使用递归的方式
1.循环反转单链表
循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可。
代码:
class ListNode:
def __init__(self,x):
self.val=x;
self.next=None;
def nonrecurse(head): #循环的方法反转链表
if head is None or head.next is None:
return head;
pre=None;
cur=head;
h=head;
while cur:
h=cur;
tmp=cur.next;
cur.next=pre;
pre=cur;
cur=tmp;
return h;
head=ListNode(1); #测试代码
p1=ListNode(2); #建立链表1->2->3->4->None;
p2=ListNode(3);
p3=ListNode(4);
head.next=p1;
p1.next=p2;
p2.next=p3;
p=nonrecurse(head); #输出链表 4->3->2->1->None
while p:
print p.val;
p=p.next;
2.递归实现单链表反转
class ListNode:
def __init__(self,x):
self.val=x;
self.next=None;
def recurse(head,newhead): #递归,head为原链表的头结点,newhead为反转后链表的头结点
if head is None:
return ;
if head.next is None:
newhead=head;
else :
newhead=recurse(head.next,newhead);
head.next.next=head;
head.next=None;
return newhead;
head=ListNode(1); #测试代码
p1=ListNode(2); # 建立链表1->2->3->4->None
p2=ListNode(3);
p3=ListNode(4);
head.next=p1;
p1.next=p2;
p2.next=p3;
newhead=None;
p=recurse(head,newhead); #输出链表4->3->2->1->None
while p:
print p.val;
p=p.next;
文章浏览阅读600次。为了应付暑期实习在线机试,本人进行了为期两天的临时抱佛脚突击复习(佛:救不了,复习两天,瞧不起谁呢。。。),当我看到熟悉的oj页面时我确信,这玩意儿就改该用C语言!染后放弃pycharm和anaconda开始了从零开始的C语言生活。首先我选择了VScode作为编译器(作死的开始),本来anaconda会自带VScode,但是这次下载的不知咋回事没有不要紧!让我们从零开始(作死)。官网下载V..._vscode 安装c++
文章浏览阅读432次。Matlab:导入文本文件_matlab表格怎么录入汉字
文章浏览阅读2.8k次。华为数通硬件四部李昂[email protected]://lllaaa.cublog.cn看FreeBSD-7 的内核代码有一段时间了,但是一直没有能够总结一下。由于没有写文档,很多地方都是一带而过,并没有深入分析。为了逼自己能够分析完整个malloc 过程的代码,我决定一边分析一边记录自己的分析笔记。一提到内存分配,自然会想到malloc 和free 这对双胞胎。在FreeBSD 内核里_freebsd uma和dlmalloc
文章浏览阅读1.3w次。Http1.1中新增加内容, Transfer-Encoding: chunked 译为:分包传输 进行一次请求时,如果数据量较大,为了加快页面显示,而采取了分包的策略在.net中WebPag 默认不分包MVC4 默认分包一般简单的服务器交互流程比如,需要服务器返回一个字符串(test),不分包时传回内容为test分包情况下传回内容为4_禁用分块传输transfer_encoding
文章浏览阅读130次。问题:使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”代码:使用构造方法:public class ssyy{ public static void main(String[] args){ ssyy sc=new ssyy(); ..._第三章类与对象课后习题
文章浏览阅读2.1w次,点赞7次,收藏40次。第三名:Unzip OnlineUnzip Online,只需要从浏览器登陆网页端上传压缩文件即可,其支持Rar、Zip、7z、Tar等格式,上传文件最大支持200MB,网站无需注册,可以实时查看破解进度,地址:https://unzip-online.com/。第二名:Lost My PassLost My Pass此网站基本功能都有,其支持从浏览器登陆网页直接上传需破解压缩文件,除了常见了压缩文件破解密码之外,其还支持PDF、Office等加密文件的破解,地址:https://www.l._catpasswd
文章浏览阅读351次。Keyboard shortcuts for LinuxBasic editingCtrl + X Cut line(empty selection)Ctrk + C Copy line(empty selection)Alt + ↓ / ↑ Move line down/up 将当前行向下或..._linux系统的visual studio快捷键
文章浏览阅读1.5k次。matlab实现加减乘除、乘方、开平方、带括号和结果分析的GUI计算器 ,界面如下:有源码,打赏私聊,微信和电话:15653242819。_matlab gui计算器平方
文章浏览阅读334次。由于 Java 的 Serializable 的性能较低,Parcelable 正式在这个背景下产生的,它核心作用就是为了解决 Android 中大量跨进程通信的性能问题。Serializable使用大量反射和临时变量,而Parcelable少许反射通过启动 Activity 过程分析 Parcelable 序列化过程:熟悉这一过程的朋友过程肯定知道,startActivity 方法最终会通过 AMS(ActivityManagerService)完成跨进程通信调用,但是在通信之前先要将数据序列化后进_parcelable会写入磁盘吗
文章浏览阅读929次。 以centos系统为基础,创建的docker容器会乱码,系统为centos8,解决方案查询当前系统的语言包,如果没有 “zh” 开头的中文包,则需要下载locale -a在yum源中查找能安装的中文包yum search Chinese安装中文包yum install langpacks-zh_CN.noarch安装完成后,更改系统的配置localectl set-locale LANG=zh_CN.utf8...
文章浏览阅读147次。相信大家都听说了华为的鸿蒙系统目前已经被实锤了,但是鸿蒙系统究竟什么时候能够用在华为手机上,还是个未知数。不过大家非常好奇鸿蒙系统什么时候能用?鸿蒙系统什么时候能在手机上用?今天小编就带大家一起了解一下。鸿蒙系统什么时候能用前一段时间,华为官方正式对外表态:“华为将会在2020年,华为所有的智能终端设备都将会全面启用华为鸿蒙OS系统,但却将“平板、手机以及电脑这三大类的产品排除在外,这意味着华为鸿..._鸿蒙电脑操作系统什么时候上市
文章浏览阅读10w+次,点赞293次,收藏2k次。①HashMap的工作原理HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存..._hashmap底层原理面试题