当前位置: 首页 > news >正文

LeetCode-- Reverse Linked List II

题目描述:


Reverse a linked list from position m to n. Do it in-place and in one-pass.


For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,


return 1->4->3->2->5->NULL.


Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.


思路:
1. 使用栈来保存m到n之间的数字,其余元素使用队列保存
2. 在[m,n]区间外时,循环弹出栈内元素到链表
3. 在[m,n]区间内,先循环弹出队列元素到链表,再创建栈,最后需要判断当前head是否为空




实现代码:






/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode ReverseBetween(ListNode head, int m, int n) {
        var stack = new Stack<int>();
        var q = new Queue<int>();
        ListNode node = null;
        var c = 1;
		ListNode newNode = null;
        while(head != null)
        {
            if(c >= m && c <=n){
                while(q.Count > 0){
                    var first = MoveNext(ref node , q.Dequeue());
					if(first){
						newNode = node;
					}
                }
                while(c >= m && c<= n){
                    stack.Push(head.val);
                    head = head.next;
                    c++;
                }
				if(head == null){
					 while(stack.Count > 0){
						var first = MoveNext(ref node , stack.Pop());
						if(first){
							newNode = node;
						}
					}
				}
            }
            else{
                while(stack.Count > 0){
                    var first = MoveNext(ref node , stack.Pop());
					if(first){
						newNode = node;
					}
                }
                var f = MoveNext(ref node , head.val);
				if(f)
				{
					newNode = node;
				}
                head = head.next;
				c++;
            }
        }
        
        return newNode;
    }
    
    private bool MoveNext(ref ListNode n , int val){
        if(n == null){
            n = new ListNode(val);
			return true;
        }
        else{
            n.next = new ListNode(val);
            n = n.next;
			return false;
        }
    }
    
}


相关文章:

  • 老牛破车般的CSDN博客
  • LeetCode- Two Sum
  • cognos8 关于密钥的问题
  • LeetCode --Word Break
  • LeetCode--H-Index
  • Leetcode--Lowest Common Ancestor of a Binary Search Tree
  • 参加Tibco的SOA应用及2009 IT架构趋势研讨会记
  • Leet 题目整理归类 - 快速通道 (持续更新)
  • 设计模式的阴谋论
  • c# mongodb driver 插入重复记录
  • 中国移动通信信息资源站实体与互联网短消息网关(ISMG)
  • MongoDB C# Driver 使用示例 (2.2)
  • C# GetHashCode 的实现方式
  • SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别比较
  • Dynamic Language Runtime (DLR) 初深
  • 【RocksDB】TransactionDB源码分析
  • AHK 中 = 和 == 等比较运算符的用法
  • DOM的那些事
  • IP路由与转发
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JAVA多线程机制解析-volatilesynchronized
  • java取消线程实例
  • node.js
  • python docx文档转html页面
  • python3 使用 asyncio 代替线程
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SpiderData 2019年2月13日 DApp数据排行榜
  • sublime配置文件
  • 从零开始在ubuntu上搭建node开发环境
  • 观察者模式实现非直接耦合
  • 手机端车牌号码键盘的vue组件
  • Linux权限管理(week1_day5)--技术流ken
  • MPAndroidChart 教程:Y轴 YAxis
  • Spring Batch JSON 支持
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #单片机(TB6600驱动42步进电机)
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (转)JAVA中的堆栈
  • (转)scrum常见工具列表
  • (转)创业家杂志:UCWEB天使第一步
  • (转)我也是一只IT小小鸟
  • ***原理与防范
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET构架之我见
  • .NET简谈设计模式之(单件模式)
  • .NET业务框架的构建