《算法通关村第二关——指定区间反转问题解析》

前言:

  • 上一次青铜是做了链表反转的基本用法
  • 这次是关于区间反转以及区间反转的特殊情况-两两反转问题等等链表反转的拓展问题

重点:

  • 内容:链表反转的拓展问题也是高频题

要点:

1、链表反转中,可以通过头插法来对要反转的链表进行穿针引线式来进行反转。

小结:

1、指定区间反转代码:

@SuppressWarnings("all")
public class ReverseListBetween_ {
    /**
     * 通过头插法区间反转链表
     * @param head 区间反转的链表头
     * @param left 反转开始的位置
     * @param left 反转结束的位置
     * @return 区间反转后的链表头
    * */
    public ListNode reverseListBetween_(ListNode head,int left,int right){
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;
        ListNode pre = dummyHead;
        ListNode cru = null;
        ListNode temp = null;
        //假设left为[1,链表的长度]
        for (int i = 1; i <= left - 1; i++) {
            pre = pre.next;
        }
        temp = pre.next;
        for (int i = 0; i < right - left; i++) {
            cru = temp.next;
            temp.next = cru.next;
            cru.next = pre.next;
            pre.next = cru;
        }
        return dummyHead.next;
    }

    static class ListNode {
        public int val;
        public ListNode next;

        ListNode(int x) {
            val = x;
            next = null;
        }
    }
}

其他/心得:

1、写代码前,在纸上分析代码时,可以先从普通情况下直接处理,然后处理好后,再倒回去想特殊情况怎么处理,可以记一些常见的特殊情况,或根据题目意思思考特殊情况,关于特殊情况的思考可以是有:

  • 当区间对应的两个引用指向同一个时,会发生什么?
  • 如果头结点为空怎么办?
  • 因为这个区间反转的本质可以理解为插入,所以链表插入的特殊情况是有什么?

2、关于两两反转,因为两两反转的两节点相邻,所以代码可以简写,所以要结合人家结构的特点,这样代码会更简洁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值