链表指定区间反转-java

链表内指定区间反转

http://www.nowcoder.com/questionTerminal/b58434e200a648c589ca2063f1faf58c

解题思路

将链表分为三个部分:前m-1个节点、中间n-m+1个节点、第n个节点之后的部分

Step1: 前m-1个节点尾插法插入到新的链表
Step2: 以Step1的结果的最后一个结点作为头将中间n-m+1个以头插法插入,并记录尾结点。
Step3: 将剩余部分拼接到Step2的结果尾结点后。

    public ListNode reverseBetween (ListNode head, int m, int n) {
        // write code here
        ListNode newHead = new ListNode(-1);
        newHead.next = head;
        ListNode p1 = newHead;

        // 尾插法插入m-1个节点
        for(int i=1; i<m && null != p1; ++i) {
            p1 = p1.next;
        }

        // 头插法插入 n-m+1个节点
        ListNode cur = p1.next;
        p1.next = null;

        ListNode tail = null;
        for(int i=1; i<= n-m+1 && cur != null; ++i) {
            ListNode tempNode = cur;
            cur = cur.next;
            tempNode.next = p1.next;
            p1.next = tempNode;
            // 记录头插法产生端的尾结点
            if(null == tail) {
                tail = tempNode;
            }
        }

        tail.next = cur;
        return newHead.next;
    }
全部评论

相关推荐

06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
重生之我要干前端:放宽心,作弊很明显的,面试官也不是傻子,而且这世上更多的肯定是依靠自己的知识的人,所以放宽心提升自己最重要
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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