92. 反转链表 II

92. 反转链表 II

难度:中等
类似题目:反转链表1
题目描述
在这里插入图片描述
解题思路
先设置虚拟头节点便于处理m=1的情况,然后找到第m个节点的前一位,反转m~n之间,注意最后还要把反转之后节点指向剩余的节点

/*
	  * 92. 反转链表 II
	  * 2020/5/15
	  */
	 public ListNode reverseBetween(ListNode head, int m, int n) {
		 if(m == n)
	            return head;
	     ListNode p = new ListNode(0);  //设置一个虚拟头节点
	     p.next = head;
	     head = p;
		 n = n-m+1;
		 while(m-- > 1) {
			 p = p.next;
		 }
		 ListNode q = null;
		 ListNode cur = p.next;
        ListNode next = null;
		 while(n-- > 0 && cur != null) {  //反转开始
			 next = cur.next;
			 cur.next = q;
			 q = cur;
			 cur = next;
		 }
		 p.next = q;  //p指向反转之后和链表的头
         while(q.next != null) {
			 q = q.next;
		 }
		 q.next = next;  //q指向反转之后剩余的链表部分
		 return head.next;
	    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值