刷题篇--数据结构--链表

一.反转链表

反转链表_牛客题霸_牛客网

如果我们有一个链表是1-->2-->3-->4-->5这样的,那我们反转后就是5-->4-->3-->2-->1这样的,那么要如果对链表操作呢?

我们可以发现在反转后的链表里1-->2,变成2-->1那么我们就顺着这个思路,直接将下一个节点插到头节点前不就好了!!看起来好像不是很难,但是实现起来却很简单😉👌,嘿嘿!(^0^)

我们可以再思考一下,将一个节点插到头节点前不就是头插嘛对不对,所以我们可以直接利用头插的方法来解决问题

因为我们要从第二个节点开始插所以定义一个cur节点等于head.next,然后我们要让cur.next指向head,之后再让cur作为头节点(2-->1-->3-->4-->5),这样不就把第二个节点和头节点逆序了吗,对但是不完全对,插是插上去了,可是之后的节点也找不到了,我们在做链表题时一定要记住不能顾头不顾尾,这时就要在定义一个节点(curNext)来存放之前的cur的下一个节点,让cur可以找到之后的尾巴,最后返回头节点就可以了!!

不过要注意,传进来的链表可能是空的,或者只有一个节点这时就不需要反转了直接返回就行了,是不是很简单😉😉

源码如下(不过我建议自己先敲一遍):

其实还可以用栈来实现,只需要将链表压入栈,再拿出来就直接反转了,我觉得这个你可以自己来试一试了😘

二.链表的中间节点

. - 力扣(LeetCode)

要找到一个链表的中间节点,你第一瞬间是不是想遍历一遍就好了嘛,得到链表长度在遍历一半不就好了。但是你自己可能也觉得这种方法,也太残暴了吧😵,效率肯定不过。那么有没有什么快一点的方法呢?答案是有的--快慢指针。

直接讲核心思想就是,一个指针的速度是另一个指针的二倍。我们定义两个节点fast和slow,fast一次走两步,slow一次走一步,那么当fast走完链表时slow是不是就是在链表中点位置😎,这个方法是不是很巧妙。

不过我们要注意如果链表节点个数为偶数最后fast后面会只有一个节点,要判断好,不然会出错,

代码如下(不过我建议自己先敲一遍):

java:

c:

//我们还可以扩展一下思维既然我们可以用这种方法找到中间节点,那么应该也可以找到倒数第三个节点,倒数第四个节点,有兴趣的话可以试一试,自己解决的想出来的方法,记忆和理解会更深刻的!!相信自己可以!🥰🙉

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值