MergeLinklist
写了一个合并有序链表,代码有点纠结啊。涉及到指针就是麻烦,DS课曹老师课件说linklist是DS的难点。
。
。
假设数组就非常easy了。链表就要小心。
里面遇到的一些情况。第一。最好是先确定l1归到l2还是相反。我是把l1归到L2,返回l2, 并且要先把l2的位置定好,仅仅要比較第一次就能够确定了。
否则后面写逻辑那叫一个纠结啊。。。
然后后面比較两个大小,类似于数组归并,prev1,prev1表示当前节点前一个节点。由于linklist要link起来都要prev。
后面须要推断是否有头插,由于头插的prev比較特殊,我用NULL来区分是否头插,后面就不用了,因此在一開始区分l2的位置是在这里看是有优点的。然后最后结束的时候,看下。假设p2==NULL 说明p1另一些最大的数,直接append到prev2的后面就能够了。:)
附上代码,一次AC可是在IDE调了一会儿=。
= 之前还直接都不调。导致各种编译问题= =
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {//move l1 to l2
if(l1==NULL) return l2;//including l2 null, not null
if(l1!=NULL&&l2==NULL) return l1;
ListNode *p1=l1,*prev1=l1, *p2=l2, *prev2=NULL,*p1next,*p2next;
bool startpoint=false;
if(l1->val<l2->val)l2=l1;
while(p1!=NULL&&p2!=NULL)
{
if(p1->val>=p2->val)
{
/*
if(startpoint==false)
{
startp=p2;
startpoint=true;
}*/
prev2=p2;
p2=p2->next;
}
else
{
p1next=p1->next;
if(prev2==NULL)//first, insert into L2 head
{
prev2=p1;p1->next=p2;
}
else
{
prev2->next=p1;
p1->next=p2;
}
prev2=p1;
p1=p1next;
}
}
if(p1==NULL)return l2;
if(p2==NULL) {prev2->next=p1;return l2;}
}
MergeLinklist的更多相关文章
- 链表面试题Java实现【重要】
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 数据结构——基于java的链表实现(真正理解链表这种数据结构)
原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10759599.html,否则将追究法律责任!!! 一.链表介绍 1.什么是链表? 链表是一 ...
- Java 合并两个有序链表
编程实现合并两个有序(假定为降序)单链表的函数,输入为两个有序链表的头结点,函数返回合并后新的链表的头节点, 要求:不能另外开辟新的内存存放合并的链表. 递归方式: /* * 递归方式 */ publ ...
- 程序面试题——C实现
平台:win10 x64 +VC6.0 2019/5/22 1.合并三个有序的链表 链表节点定义struct node{ int val; struct node* next;}; str ...
- C++面试常见问题——04链表的逆序与合并
链表的逆序与合并 链表的逆序 已知一个链表的头指针为head,将该链表逆序. #include<iostream> using namespace std; struct Node{ in ...
- 2、java数据结构和算法:单链表: 反转,逆序打印, 合并二个有序链表,获取倒数第n个节点, 链表的有序插入
什么也不说, 直接上代码: 功能点有: 1, 获取尾结点 2, 添加(添加节点到链表的最后面) 3, 添加(根据节点的no(排名)的大小, 有序添加) 4, 单向链表的 遍历 5, 链表的长度 6, ...
- 链表 Linked List
目录 链表介绍 单链表 单链表的应用实例 添加-直接添加到末尾 添加-顺序添加 更新 删除 单链表的面试题 双链表 链表介绍 链表时有序的列表,但是它在内存中是存储如下 小结 链表是以节点的方式来存储 ...
随机推荐
- PAT Basic 1049
1049 数列的片段和 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0.2) (0.1 ...
- http过程
当在浏览器里输入URL地址时,http的通讯过程: 1) 连接 DNS解析:URL——>DNS服务器(找到返回其ip,否则继续将DNS解析请求传给上级DNS服务器) Socket连接:通过IP和 ...
- Python requests模块params、data、json的区别
json和dict对比 json的key只能是字符串,python的dict可以是任何可hash对象(hashtable type): json的key可以是有序.重复的:dict的key不可以重复. ...
- C++类指针初始化
上面的代码会打印“A”. C++ 类指针定义的时候没有初始化的时候,居然可以安全的调用类内部的成员函数而不出错. 在网上查了一下: 初始化为NULL的类指针可以安全的调用不涉及类成员变量的类成员函 ...
- x86实模式到保护模式 李忠 王晓波
x86实模式到保护模式 李忠 王晓波 第3到4章 各个进制间的转换省略 实验环境 编译器 nasm 虚拟机 virtual box 小程序 hexview 观察编译后的机器代码 fixvhd ...
- Leetcode 354.俄罗斯套娃信封问题
俄罗斯套娃信封问题 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现.当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计 ...
- numpy.clip(a, a_min, a_max, out=None)(values < a_min are replaced with a_min, and those > a_max with a_max.)
numpy.clip(a, a_min, a_max, out=None) Clip (limit) the values in an array. Given an interval, values ...
- Java面向对象三大特征
封装: 首先,属性可用来描述同一类事物的特征, 行为可描述一类事物可做的操作,封装就是要把属于同一类事物的共性(包括属性与行为)归到一个类中,以方便使用.比如人这个东东,可用下面的方式封装:人{ 年龄 ...
- hdu6073[dfs+删边] 2017多校4
题目中对二分图的定义十分特殊, 指的是 U,V两部分中,U的顶点度数必定为2,V中顶点无限制. 题目要求的是 对于所有匹配,该匹配的权值=该匹配中选中的边的边权的乘积,求所有匹配权值之和. 对于V中的 ...
- BZOJ 3230 相似子串 ——后缀数组
题目的Source好有趣. 我们求出SA,然后求出每一个后缀中与前面本质不同的字符串的个数. 然后二分求出当前的字符串. 然后就是正反两次后缀数组求LCP的裸题了. 要注意,这时两个串的起点可能会相同 ...