反转链表II(根据指定的索引,逆转链表)
2024-10-13 21:59:25
反转从位置 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;
}
最新文章
- syntax error near unexpected token‘(
- json pickle time
- 我的Android第四章:Android的adb命令使用以及SQlite数据库运用
- 【Linux.Python】Python进程后台启动
- Struts2中的get、set方法作用:
- Android的debug.keystore拒绝访问导致的生成异常及解决方案
- 排列oj
- 1.5 PCI-X总线简介
- appiun滑动的简单封装
- JS制作图片切换
- android-mediaplayer播放
- 加密PDF文件的打印问题
- keystone 安装随笔
- Sublime Text 3 3143 注册码和遇到的PyV8无法下载问题
- centos7系统分区方案
- ASP.NET结合COM组件发送Email
- Python3基础 file open+write 对不存在的txt进行创建与写入
- 3994: [SDOI2015]约数个数和
- Atitit. 有限状态机 fsm 状态模式
- 【BZOJ】3402: [Usaco2009 Open]Hide and Seek 捉迷藏(spfa)