题解 | #反转链表#

反转链表

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

反转链表是一道简单题,但是有时会脑抽突然想不起来思路,所以记录一下。

本地的做法有两种 1. 创建一个新的头结点然后遍历原链表使用尾插法来新建链表;2. 在原链表上进行修改的双指针法改变一个链表中的指针指向。

这里使用的是双指针法。

/**
     * 双指针 改变链表节点的指向 在原链表基础上修改
     * @param head
     * @return
     */
    public ListNode reverseList01(ListNode head) {
        //记录前驱
        ListNode prev = null;
        //遍历节点
        ListNode cur = head;
        //临时节点
        ListNode temp = null;

        //遍历
        while (cur!=null){
            //通过临时节点 记录cur节点顺序下的下一个节点
            temp = cur.next;
            //然后再将cur.next的指向翻转
            cur.next = prev;
            prev = cur;
            cur = temp;
        }
        //循环执行直至cur==null
        //再返回prev 此时的prev就是原链表的末尾节点 但是节点指向都翻转了 所以这是翻转后链表的头结点

        return prev;
    }
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务