题解 | #反转链表#

反转链表

https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

假设单链表为如下: alt 解题思路:使用头插法,遍历链表的同时进行头插。

​ 我们先定义两个指针 cur 和 curNext,cur表示当前遍历位置的节点,curNext表示cur的下一个节点,cur从head开始。

首先将head置为null,代表链表末尾节点的next。 alt 然后从cur开始进行头插,让cur.next = head; head = cur,注意一定要将curNext赋值,不然就会丢失后面的节点。

实现代码:

public ListNode reverseList(ListNode head) {
    if (null == head) return null; // 判断空链表

    ListNode cur = head; // 从head开始
    head = null; // 将head置为null
    while (null != cur) { // 遍历整个链表
        ListNode curNext = cur.next; // 先保存cur后面的子链表
        cur.next = head; // 头插
        head = cur;
        cur = curNext;
    }

    return head;
}

​ 时间复杂度O(N):N为单链表的长度,需要遍历每个节点一次。

​ 空间复杂度O(1):使用几个常量大小的临时变量。

#面试题打卡学习#
全部评论

相关推荐

rbjjj:太杂了吧,同学,项目似乎都没深度,都是api调度耶,分层架构思想没有体现出来了,前端没有前端优化前端工程化体现,后端微服务以及分层架构没体现以及数据安全也没体现,核心再改改,注重于计算机网络,工程化,底层原理吧
点赞 评论 收藏
分享
12-19 15:48
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务