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

leet code -- Swap Nodes in Pairs

题目描述:


Given a linked list, swap every two adjacent nodes and return its head.


For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.


Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.


Subscribe to see which companies asked this question


就是成对的交换链表的相邻元素。


比较直接的思路是两次遍历:
第一次遍历使用数据结构存链表节点对(本例使用的是sector类)
第二次遍历节点生成新链表并返回其头指针即可。





/**
 * 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 SwapPairs(ListNode head) 
{
	if (head == null || head.next== null){
		return head;
	}
	
	var queue = new Queue<Sector>();
	var h = head;
	while(h != null){
		if(h.next == null){
			queue.Enqueue(new Sector(h.val, null));
			h = h.next;
		}
		else{
			// there is a lot ,continue make queue
			queue.Enqueue(new Sector(h.val, h.next.val));
			h = h.next;
			h = h.next;
		}
		
	}
	
	ListNode result = null;
	ListNode r = null;
	while(queue.Count > 0){
		var s = queue.Dequeue();
		if(result == null){
			result = s.node2;
			r = result;
			result.next = s.node1;
			result = result.next;
		}else{
			if(s.node2 != null){
				result.next = s.node2;
				result = result.next;
				result.next = s.node1;
				result = result.next;
			}
			else{
				result.next = s.node1;
				result = result.next;
			}
			
		}
	}
	
	return r;
}


public class Sector{
	public ListNode node1;
	public ListNode node2;
	public Sector(int? v1, int? v2)
	{
		if(v1.HasValue){
			node1 = new ListNode(v1.Value);
		}
		if(v2.HasValue){
			node2 = new ListNode(v2.Value);
		}
	}
}
}


相关文章:

  • LeetCode -- Range Sum Query - Immutable
  • 嵌入式产品认证相关的小知识
  • leet code - Third Maximum Number
  • 关于中国软件发展的讨论沙龙
  • SQL server replication的三种方式
  • leetcode -- Count Numbers with Unique Digits
  • javascript小数四舍五入
  • 业务场景和业务用例场景的区别(作者:Arthur网友)
  • Android -- 打开时隐藏软键盘
  • 邀请大象一书的读者和广大网友写关于分析设计、建模方面的自愿者文章
  • Android -- 读取NFC卡号
  • Windows 7安装以及VS2008和Office2007冲突的问题
  • C# Windows form application 播放小视频
  • 系列文章—内容模型系统开发总结一
  • LeetCode -- Coin chane
  • [PHP内核探索]PHP中的哈希表
  • angular2 简述
  • interface和setter,getter
  • Java 网络编程(2):UDP 的使用
  • Java面向对象及其三大特征
  • Koa2 之文件上传下载
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Redis字符串类型内部编码剖析
  • tweak 支持第三方库
  • 从重复到重用
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 对超线程几个不同角度的解释
  • 分布式事物理论与实践
  • 区块链技术特点之去中心化特性
  • 一天一个设计模式之JS实现——适配器模式
  • linux 淘宝开源监控工具tsar
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (超详细)语音信号处理之特征提取
  • (分布式缓存)Redis哨兵
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (全注解开发)学习Spring-MVC的第三天
  • (十六)Flask之蓝图
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)http-server应用
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET Core 版本不支持的问题
  • [ACTF2020 新生赛]Upload 1
  • [android] 手机卫士黑名单功能(ListView优化)
  • [C# WPF] 如何给控件添加边框(Border)?
  • [CF494C]Helping People
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备
  • [IOI2018] werewolf 狼人
  • [Java]深入剖析常见排序