题解 | #链表内指定区间反转#
链表内指定区间反转
http://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
import java.util.*;
/*
- public class ListNode {
- int val;
- ListNode next = null;
- } */ // class ListNode{ // int val; // ListNode next; // ListNode(int val,ListNode next){ // this.val = val; // this.next = next; // } // }
public class Solution { /** * * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类 */ public ListNode reverseBetween (ListNode head, int m, int n) { //使用虚拟头结点避免m=0的情况 ListNode dummy = new ListNode(0); dummy.next = head; ListNode pre = dummy; int idx = 1; //让头结点移动到待进行偏转的前一个节点 while(idx < m){ pre = pre.next; idx++; } //每次记录要反转节点的当前节点以及下一个节点 ListNode cur = pre.next; ListNode next = cur.next; while(idx<n){ //使用临时节点保存下一个节点 避免指针改变后丢失next节点 ListNode tmp = next.next; next.next = cur; cur = next; next = tmp; idx++; } pre.next.next = next; pre.next = cur; return dummy.next; } }