题解 |链表指定区间翻转

链表内指定区间反转

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

思路

主要是分情况讨论,当m=1和m不等于1时,当m=1时,直接用头插法,不等于1时,找到翻转区间的前一个节点,再使用头插法。

代码

import java.util.*;
public class Solution {
    public ListNode reverseBetween (ListNode head, int m, int n) {
        if (m == 1){
            ListNode tmp = head, p = head.next;
            int index = 2;
            while (index++ <= n){
                tmp.next = p.next;
                p.next = head;
                head = p;
                p = tmp.next;
            }
            return head;
        }
        // 遍历指针节点
        ListNode p = head, pre = null;
        int index = 1;
        // 找到翻转区间的头结点
        while (index++ < m){
            pre = p;
            p = p.next;
        }
        if (p == null) return head;
        // 略过第一个节点
        ListNode tmp = p;
        p = p.next;
        while (index++ <= n){
            tmp.next = p.next;
            p.next = pre.next;
            pre.next = p;
            p = tmp.next;
        }
        return head;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
06-12 16:23
已编辑
小米_软件开发(准入职员工)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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