反转单链表【Java数据结构】精讲

题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

思路:反转单链表, 即原来的首节点变成尾节点,尾节点变成首节点,所以我们首先要将首节点的next指向null,此时要注意,如果我们没有对首节点的原指向进行存储操作的话,就会丢失原指向,那就完成不了了,所以在我们修改每一个节点的原指向的时候,需要对原指向进行存储,这样就能存有原指向的节点。

        所以我们就定义一个正在修改指向的节点cur和一个cur的原指向节点curNext,那么就可以切断局部链表和后续链表的连接进行操作了,在每一个节点反转完成后再找到下一个节点进行操作。

思路图(结合代码分析): 

此时cur正在第二个节点上,我们使用cur.next来存储cur的原指向,保证在cur节点反转后,后续链表不会失去联系。

且在第二个节点完成反转后,就使head指向cur所在节点,cur指向curNext所在节点,保证链表反转正常。

在每次反转开始的时候,都需要curNext = cur.next 来继续去存储正在进行反转的节点的原指向。

 依然是按照上面的规则进行反转。

 直到cur指向null的时候,反转结束,head最后走到了最后一个节点的位置,返回head节点即可。

除此之外,还需要判断如果没有节点的时候,要返回空;以及只有一个节点的时候,反转后还是一个节点。 

代码实现 :

public ListNode reverseList(ListNode head) {
        //讨论的是 没有节点
        if (head == null){
            return null;
        }
        //讨论的是 只有一个节点
        if (head.next == null){
            return head;
        }
        ListNode cur = head.next;
        head.next = null;
        while (cur != null){
            ListNode curNext = cur.next;
            cur.next = head;
            head = cur;
            cur = curNext;
        }
        return head;
    }

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PlLI-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值