反转从位置 m 到 n 的链表。请使用一趟扫描完成反转

思想:首先判断链表是否合法,并且判断输入的m和n是否合法

定义dummyHead结点,让它指向头结点的前驱,再定义cur,让它指向dummyHead,找到m位置的前驱结点,让cur指向它,接下来的操作和链表逆序一样,只不过只进行n-m次。

代码如下:

public ListNode reverseBetween(ListNode head, int m, int n) {
//链表长度
int length = getLength(head);
int t = n - m;
//判断链表是否合法,并且m和n是否合法
if(length<n || m>=n || head == null || head.next == null) return head;
//定义头结点的前驱结点
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
//定义临时结点,指向dummyHead
ListNode cur = dummyHead;
//让cur指向m位置结点的前驱结点
while(m>1){
cur = cur.next;
m--;
}
//逆转链表n-m次
ListNode f = cur.next;
ListNode s = f.next;
while(s!=null && t>0){
f.next = s.next;
s.next = cur.next;
cur.next = s;
s = f.next;
t--;
}
//返回
return dummyHead.next;
}
//求链表长度
public static int getLength(ListNode head){
int count = 0;
while(head!=null){
head = head.next;
count++;
}
return count;
}

最新文章

  1. syntax error near unexpected token‘(
  2. json pickle time
  3. 我的Android第四章:Android的adb命令使用以及SQlite数据库运用
  4. 【Linux.Python】Python进程后台启动
  5. Struts2中的get、set方法作用:
  6. Android的debug.keystore拒绝访问导致的生成异常及解决方案
  7. 排列oj
  8. 1.5 PCI-X总线简介
  9. appiun滑动的简单封装
  10. JS制作图片切换
  11. android-mediaplayer播放
  12. 加密PDF文件的打印问题
  13. keystone 安装随笔
  14. Sublime Text 3 3143 注册码和遇到的PyV8无法下载问题
  15. centos7系统分区方案
  16. ASP.NET结合COM组件发送Email
  17. Python3基础 file open+write 对不存在的txt进行创建与写入
  18. 3994: [SDOI2015]约数个数和
  19. Atitit. 有限状态机 fsm 状态模式
  20. 【BZOJ】3402: [Usaco2009 Open]Hide and Seek 捉迷藏(spfa)

热门文章

  1. JavaScript中大数相加的解法
  2. function Language
  3. 安装mysql和xampp遇到问题
  4. canvas绘图工具
  5. 二维、三维 Laplace 算子的极坐标表示
  6. 有关于 java native方法
  7. 高并发秒杀系统--SpringMVC整合
  8. PYthon3:简单几步实现冒泡排序
  9. 用juery的ajax方法调用aspx.cs页面中的webmethod方法
  10. Executors的四种线程池