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
目录 链表介绍 单链表 单链表的应用实例 添加-直接添加到末尾 添加-顺序添加 更新 删除 单链表的面试题 双链表 链表介绍 链表时有序的列表,但是它在内存中是存储如下 小结 链表是以节点的方式来存储 ...
随机推荐
- bash文件名统配
bash基础特性之globbing,即文件名通配: 文件名通配:使用元字符匹配字符 *:匹配任意长度的任意字符 假如文件名为paaaa,则pa*,*pa ...
- 八、docker的常用命令
1 Docker常用命令 1.1 存储镜像 如果要导出镜像到本地文件,可以使用 docker save 命令. docker save -o log_v140.tar docker.io/vmware ...
- 面试准备——rpc面试题
https://www.jianshu.com/p/28e48e5f9c73 1 什么是 RPC ? RPC (Remote Procedure Call)即远程过程调用,是分布式系统常见的一种通信方 ...
- tinyMCE获取鼠标选中的值
今天遇到一个需求就是要在WordPress的文章编辑页面增加选中文字时要将选中值传递到弹出窗口中 解决方法: 去网上找到了下面这段代码,可以获取到选中文本 { type: 'textbox', nam ...
- 【Luogu】P2831愤怒的小鸟(手算抛物线+状压DP)
题目链接 设f[s]表示二进制集合表示下的s集合都打掉用了多少小鸟. 预处理出lne[i][j]表示i.j确定的抛物线能打掉的小鸟集合. 于是就有f[s|lne[i][j]]=min(f[s|lne[ ...
- 【Luogu】P1586四方定理(DP)
题目链接 此题使用DP.设f[i][j]表示数i用j个数表示,则对于所有的k<=sqrt(i),有 f[i][j]=∑f[i-k*k][j-1] 但是这样会有重复情况.所以先枚举k,再枚举i和j ...
- Chrome中输入框默认样式移除
Chrome中输入框默认样式移除 在chrome浏览器中会默认给页面上的输入框如input.textarea等渲染浏览器自带的边框效果 IE8中效果如下: Chrome中效果如下: 这在我们未给输 ...
- ZOJ 3306 状压dp
转自:http://blog.csdn.net/a497406594/article/details/38442893 Kill the Monsters Time Limit: 7 Seconds ...
- 在 IntelliJ IDEA 中为自己设计的类库生成 JavaDoc
因为某个项目需要,为团队其他兄弟姐妹开发了一个 XML 分析处理器,并将其设计为一个类库,提供相应的 API 接口.为了方便大家的使用,需要生成对应的 JavaDoc 帮助文档,就像 JavaSE 标 ...
- C# 编程中的堆栈(Stack)和队列(Queue)
一.什么是堆?(Heap) 堆是无序的,是一片不连续的内存域,由用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,通过垃圾回收器(GC)来回收. 是程序运行期 ...