写了一个合并有序链表,代码有点纠结啊。涉及到指针就是麻烦,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的更多相关文章

  1. 链表面试题Java实现【重要】

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. 数据结构——基于java的链表实现(真正理解链表这种数据结构)

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10759599.html,否则将追究法律责任!!! 一.链表介绍 1.什么是链表? 链表是一 ...

  3. Java 合并两个有序链表

    编程实现合并两个有序(假定为降序)单链表的函数,输入为两个有序链表的头结点,函数返回合并后新的链表的头节点, 要求:不能另外开辟新的内存存放合并的链表. 递归方式: /* * 递归方式 */ publ ...

  4. 程序面试题——C实现

    平台:win10 x64 +VC6.0 2019/5/22 1.合并三个有序的链表 链表节点定义struct node{    int val;    struct node* next;}; str ...

  5. C++面试常见问题——04链表的逆序与合并

    链表的逆序与合并 链表的逆序 已知一个链表的头指针为head,将该链表逆序. #include<iostream> using namespace std; struct Node{ in ...

  6. 2、java数据结构和算法:单链表: 反转,逆序打印, 合并二个有序链表,获取倒数第n个节点, 链表的有序插入

    什么也不说, 直接上代码: 功能点有: 1, 获取尾结点 2, 添加(添加节点到链表的最后面) 3, 添加(根据节点的no(排名)的大小, 有序添加) 4, 单向链表的 遍历 5, 链表的长度 6, ...

  7. 链表 Linked List

    目录 链表介绍 单链表 单链表的应用实例 添加-直接添加到末尾 添加-顺序添加 更新 删除 单链表的面试题 双链表 链表介绍 链表时有序的列表,但是它在内存中是存储如下 小结 链表是以节点的方式来存储 ...

随机推荐

  1. 模板<最小生成树>

    转载 最小生成树浅谈 这里介绍最小生成树的两种方法:Prim和Kruskal. 两者区别:Prim在稠密图中比Kruskal优,在稀疏图中比Kruskal劣.Prim是以更新过的节点的连边找最小值,K ...

  2. luogu2604 [ZJOI2010]网络扩容

    先做一遍普通的dinic 然后再更改源点为超级源,超级源向原源加一条capacity=k && cost=0的边,再加上有费用的边跑最小费用最大流 #include <iostr ...

  3. 路由重分发 最重要 最难 ccnp

    路由重分发   多种协议之间    彼此学习到对方的路由 重分发好   结果好 重分发不好   结果最好是产生次优路径      最差事产生路由黑洞和环路 实例1:    重分发一般需要双向重分发   ...

  4. Leetcode 375.猜数字大小II

    猜数字大小II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了. 然而,当你猜了数字 x ...

  5. CF802D

    D. Marmots (easy) time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  6. HDU-4849 Wow! Such City!,最短路!

    Wow! Such City!    题意:题面很难理解,幸亏给出了提示,敲了一发板子过了.给出x数组y数组和z数组的求法,并给出x.y的前几项,然后直接利用所给条件构造出z数组再构造出C数组即可,C ...

  7. PTA 07-图6 旅游规划 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划   (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...

  8. 集群高可用之lvs+keepalive

    集群高可用之lvs+keepalive keepalive简介: 负载均衡架构依赖于知名的IPVS内核模块,keepalive由一组检查器根据服务器的健康情况动态维护和管理服务器池.keepalive ...

  9. 【Luogu】P1854花店橱窗布置(DP)

    照例良心题目链接 此题使用f[i][j]表示前i束花放进前j个花瓶的时候的最大值.转移方程如下 f[i][j]=max(f[i][j-1],f[i-1][j-1]+que[i][j]) 其中que[i ...

  10. P1410 子序列 (动态规划)

    题目描述 给定一个长度为N(N为偶数)的序列,问能否将其划分为两个长度为N/2的严格递增子序列. 输入输出格式 输入格式: 若干行,每行表示一组数据.对于每组数据,首先输入一个整数N,表示序列的长度. ...