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
目录 链表介绍 单链表 单链表的应用实例 添加-直接添加到末尾 添加-顺序添加 更新 删除 单链表的面试题 双链表 链表介绍 链表时有序的列表,但是它在内存中是存储如下 小结 链表是以节点的方式来存储 ...
随机推荐
- BRVAH(让RecyclerView变得更高效)(1)
本文来自网易云社区 作者:吴思博 对于RecyclerView, 我们重复编写着那一个又一个的列表界面,有的要分组,有的要添加广告头部.有的要不同类型item排列.等等需求,主要代码有大部分是重复的, ...
- python基础-面向对象(类)
类 类的定义 >>> class P: ... pass ... >>> P <class __main__.P at 0x0000000001F4B ...
- IE浏览器部分js代码不生效的问题
[小小坑记录] 问题描述:IE浏览器写好功能代码之后,在调试模式下程序能正常运行.不开启调试模式正常访问时js部分功能代码不生效. 原因:在测试时用了console对象在控制台输出一一些内容,而IE的 ...
- 【LeetCode】Linked List Cycle(环形链表)
这道题是LeetCode里的第141道题. 题目要求: 给定一个链表,判断链表中是否有环. 进阶: 你能否不使用额外空间解决此题? 简单题,但是还是得学一下这道题的做法,这道题是用双指针一个fast, ...
- 九度oj 题目1536:树的最小高度
题目描述: 给定一棵无向树, 我们选择不同的节点作为根节点时,可以得到不同的高度(即树根节点到叶子节点距离的最大值), 现在求这棵树可能的最低高度. 输入: 输入可能包含多个测试案例. 对于每个测试案 ...
- C 语言中的 feof()函数
功能: feof 是 C 语言标准库函数函数,其原型在 stdio.h 中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,文件结束符只能被 clearerr() 清除. 用法: ...
- 洛谷 P 3371 单元最短路
题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出发点的编号. 接下来M行每行包含三 ...
- 更改UISwitch大小
UISwitch大小总是改不了...找了一个简便方法. mySwitch = [[UISwitch alloc] initWithFrame: CGRectMake( width - 55, hei ...
- 洛谷——P1025 数的划分
P1025 数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有 ...
- js dom 的常用属性和方法
1.对象集合: (1).all[]; (2).images[]; (3).anchors[]; (4).forms[]; (5).links[]; ...