赞
踩
相信许多小可爱在刚接触链表的时候都会接触一个问题——如何不借助辅助链表实现单链表的反转,也许看到这里之前你一定很头疼,但是别急,看完这篇,你会发现链表竟是那么神奇
我们进行反转的思路是通过把原链表的头结点的下一个结点拎出来,然后让他成为新的头节点,当原来的头结点成为尾结点的时候就说明反转完成了。
在反转之前,我们假设链表是这样的
没错,我们要实现的是头节点存数据的单链表的反转,习惯头节点不存数据的小可爱也不必担心,基本原理是类似的,到时候根据原理自己写出来的时候相信你一定会感悟颇深的。
好的,回归正题。
我们首先做的一步工作非常的简单——先判断链表是否为空,如果是个空链表,那还反转个啥呀?直接咋来的咋给他返回回去,剩下的时间就可以摸鱼啦!(手动兴奋)
哈哈,开个玩笑,当链表不为空的时候,应该怎样操作呢?
首先,我们用一个flag
记录下原来链表中的头节点。
紧接着,用一个newNode
记录下flag的下一个元素,即flag->next
,这就是我们这次循环要操作的元素了
接下来就到重头戏了,屏住呼吸,我们让flag->next=newNode->next
,也就是把“2”这个结点从链表中删除掉。
将此结点从链表中先除掉是为了让他可以成为新的头节点而不影响其他结点。
之后我们让链表的头节点(head
)指向这个被操作的结点,也就是“2”,既然操作之后此节点成为了新的头结点,那自然是要让头结点指向这个结点了呀。
自此,我们迭代的第一次成功完成了(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。