当前位置 博文首页 > 数据结构和算法:LeetCode 92. 反转链表 II
截止到目前我已经写了 500多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666
之前讲过链表的全部反转《432,剑指 Offer-反转链表的3种方式》,而这题只要求反转链表的部分节点,如果直接使用多个指针对需要反转的节点前后两两交换,也是可以解决的。
再来看下代码
public ListNode reverseBetween(ListNode head, int m, int n) {
//为了方便处理,先创建一个哑节点,让他指向head
ListNode dummy = new ListNode(0);
dummy.next = head;
//记录开始反转节点的前一个节点
ListNode pre = dummy;
for (int i = 0; i < m - 1; i++) {
pre = pre.next;
}
//记录开始反转的节点,我们把它后面需要反转的的节点
//都移动到前面
ListNode cur = pre.next;
//采用头插法,把后面的节点都插入到前面
for (int i = 0; i < n - m; i++) {
ListNode next = cur.next;
cur.next = next.next;
next.next = pre.next;
pre.next = next;
}
return dummy.next;
}
cs