剑指offer随练
合并两个排序的链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:使用递归的方法,合并头节点,然后对剩下的链表接着合并头节点,直到合并完毕。
或者可以使用非递归的方法,新建一个新的链表,然后依次对两链表的头节点进行比较,哪个小就放到新的链表中,而且该链表向后移动一位。
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
//递归
function Merge(pHead1, pHead2)
{
if(pHead1==null){
return pHead2;
}
if(pHead2==null){
return pHead1;
}
if(pHead1.val<=pHead2.val){
pHead1.next = Merge(pHead1.next,pHead2);
return pHead1;
} else {
pHead2.next = Merge(pHead2.next,pHead1);
return pHead2;
}
}
//非递归
function Merge(pHead1, pHead2)
{
var a = new ListNode(1);
var b = a;
if(pHead1==null){
return pHead2;
}
if(pHead2==null){
return pHead1;
}
while(pHead1!=null&&pHead2!=null){
if(pHead1.val<=pHead2.val){
a.next = pHead1;
pHead1 = pHead1.next;
} else {
a.next = pHead2;
pHead2 = pHead2.next;
}
a = a.next;
}
if(pHead1 != null){
a.next = pHead1;
} else {
a.next = pHead2;
}
return b.next;
}
链表中倒数第k个结点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路:让a和b都指向链表的头节点,然后a先走k步,然后a,b一起接着向后走,当a==null的时候,这时的b就是链表的倒数第k个节点。当然,要考虑一些特殊情况。
function FindKthToTail(head, k)
{
if(head==null||k<=0)//考虑链表为空和k小于0的特殊情况,返回null
return null;
var a = head;
var b = head;
while(k>0){
if(a==null){
return null;
}
//如果再走完k步之前,a已经等于null,即k大于链表长度,那么返回null
a = a.next;
k--;
}
while(a!=null){
a = a.next;
b = b.next;
}
return b;
}
剑指offer随练的更多相关文章
- 面试经典算法题集锦——《剑指 offer》小结
从今年 3 月份开始准备找实习,到现在校招结束,申请的工作均为机器学习/数据挖掘算法相关职位,也拿到了几个 sp offer.经历这半年的洗礼,自己的综合能力和素质都得到了一个质的提升. 实话说对于未 ...
- 【剑指Offer】剑指offer题目汇总
本文为<剑指Offer>刷题笔记的总结篇,花了两个多月的时间,将牛客网上<剑指Offer>的66道题刷了一遍,以博客的形式整理了一遍,这66道题属于相对基础的算法题目,对于 ...
- 剑指Offer面试题:1.实现Singleton模式
说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...
- 剑指Offer面试题:14.链表的倒数第k个节点
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...
- 《剑指offer》面试题12:打印1到最大的n位数
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...
- 《剑指offer》面试题11: 数值的整数次方
面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...
- 剑指 Offer 题目汇总索引
剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格 ...
- 面试题目——《剑指Offer》
1.把一个字符串转换成整数——<剑指Offer>P29 2.求链表中的倒数第k个结点——<剑指Offer>P30 3.实现Singleton模式——<剑指Offer> ...
- 剑指offer习题集2
1.把数组排成最小的数 class Solution { public: static bool compare(const string& s1, const string& s2) ...
随机推荐
- scrapy_图片下载
需要安装第三方库: 安装 pillow库 pip install -i https://pypi.doubanio.com/simple pillow 如何对图片进行自动下载? 首先明白,图片去哪下? ...
- python初识 - day4
一.集合(set) 1.集合的定义 set 是一个无序的元素集合,支持并.交.差及对称差等数学运算, 但由于 set 不记录元素位置, 因此不支持索引.分片等类序列的操作. 2.集合的创建 大括号或 ...
- 微信屏蔽js分享、复制链接
页面内引入js(不放在页面内部不起作用) $(function(){ function onBridgeReady() { WeixinJSBridge.call('hideOptionMenu'); ...
- matlab输入输出语句(input、disp、fprintf)
输入语句 输入数值 ?x=input('please input a number:') please input a number:22 x = 22 输入字符串 ?x=input('please ...
- Git分支高级管理[四]
标签(linux): git 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 切换分支 git checkout 撤销对文件的修改 git checkout -- ...
- 模型和字段 -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- 节点操作,节点属性的操作及DOM event事件
##1. 节点操作 createElement(标签名) 创建一个指定名称的元素 someone.appendChild(new_node) 追加一个子节点(作为最后的子节点) someone.ins ...
- CentOS 7.1静默安装11.2.0.3 64位单机数据库软件
第1章 CentOS 7.1静默安装11.2.0.3 64位单机数据库软件 1.1 安装前的准备工作 1.1.1 软件准备 1.1.2 检查硬件 注意这里的内存应该满足要求,不然 ...
- Linux内核链表-通用链表的实现
最近编程总想着参考一些有名的开源代码是如何实现的,因为要写链表就看了下linux内核中对链表的实现. 链表是一种非常常见的数据结构,特别是在动态创建相应数据结构的情况下更是如此,然而在操作系统内核中, ...
- 二分图匹配 洛谷 [P3386]
最为经典的匈牙利算法 匈牙利算法应用了增广路的性质,实际上就是通过搜索可行的增广路,每搜到一条,匹配数++ 还可以应用配对的方法去理解,此算法的时间复杂度 (V*E),比较慢,但是实现较为简单. df ...