将单链表从m到n的结点位置翻转
来源:互联网 发布:淘宝内部优惠券可信吗 编辑:程序博客网 时间:2024/05/21 15:38
题目:反转链表从m-n位置的结点
For example:
Given1->2->3->4->5->NULL, m = 2 and n = 4,
return1->4->3->2->5->NULL.
从第二到第四的结点被反转了。
其中m和n满足条件:
1 ≤ m ≤ n ≤ length of list.
思路:
仍是逆序,仍考虑到用辅助空间stack.
将m-n的结点依次入栈,并标记与入栈结点相邻的前后两个结点pfirst和psecond
(若m==1,pfirst=null,不管n是否为length of list,对psecond的情况无影响。)
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
import java.util.*;
public class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
if(head==null)
return null;
if(m==n)
return head;
Stack<ListNode> stack=new Stack(); //将m-n的结点入栈,将前后相邻的两个结点标记; int num=1; ListNode pfirst=null; ListNode psecond=null; ListNode p=head; //特殊情况,m==1时,头结点变更; if(m==1) { pfirst=null; } for(;num<=n;num++) { //记录pfirst; if(num<m) { if(num==m-1) { pfirst=p; } p=p.next; } else if(num>=m&&num<=n) { stack.push(p); p=p.next; } } //记录psecond,psecond的一般情况仍适用于n=length of list的特殊情况; psecond=p; //开始操作链表; if(pfirst==null) { head=stack.pop(); pfirst=head; } while(!stack.empty()) { pfirst.next=stack.pop(); pfirst=pfirst.next; } pfirst.next=psecond; return head;}
}
阅读全文
0 0
- 将单链表从m到n的结点位置翻转
- 链表——将单链表从m到n的结点位置翻转
- 输出从m到n的值、
- 【Java】给定两个32位的整数N与M,以及表示比特位置的i与j。编写一个方法,将M插入N,使得M从N的第 j 位开始,到第 i 位结束。
- 将链接列表从位置m反转到n。 在原位和一次通过。
- 约瑟夫问题,从o(n*m)到o(n)乃至o(m)的算法复杂度进阶
- SQL取出从M条到N条的数据
- 查询从N行到M行的记录
- 查询从m到n行的记录
- 输出从m到n的值(PHP实例)
- 关于n*m网格从左上到右下的走法数
- 给定两个32位的整数n和m,将m插进n的j到i的位置,n其他位置不变
- 取从M到N行
- 显示从N行到M行
- 从1到m随机n个数
- 2} 求从m到n的映射的个数 0 c} n{-2 b 设m={a
- 插入新结点到指定结点的指定位置
- 现的从1到N的出现M的次数算法
- 【陷阱代码】c++ 第二篇 c++11新特性及偏冷门语法场景 面对审查代码
- 访问WEB-INF目录中的JSP文件
- 浅谈Spring事务隔离级别
- Selenium webdriver+ python3.6 + Chrome
- C语言的运算符以及数据类型
- 将单链表从m到n的结点位置翻转
- TextGrocery,更好用的文本分类Python库
- php给图片加水印实例函数
- 构造函数的几种方式
- 一维数组和二维数组
- Spring入门之Springbean定义的继承
- 【Angular】——Angular mvc
- IDEA基于Maven管理的SSM(Spring+SpringMVC+mybatis)项目搭建
- 深入理解 cnn 中pooling 的重要作用