写了一个合并有序链表,代码有点纠结啊。涉及到指针就是麻烦,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. PAT Basic 1069

    1069 微博转发抽奖 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行给出三个正整 ...

  2. PAT Basic 1044

    1044 火星数字 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly ...

  3. PAT Basic 1021

    1021 个位数统计 给定一个k位整数N = d~k-1~*10^k-1^ + ... + d~1~*10^1^ + d~0~ (0<=d~i~<=9, i=0,...,k-1, d~k- ...

  4. linux 下常见命令

    ===============安装和登陆命令============================================================= Mount: 挂载命令.把存储介 ...

  5. C#Windows服务安装

    1,做好windows服务后,生成 一下,然后在项目目录中找到bin文件夹下的Debug文件夹,文件夹下有文件xxxx.exe 2,然后在C:\Windows\Microsoft.NET\Framew ...

  6. Virtualbox虚拟机相关

    Virtualbox虚拟机相关 Virtualbox是我一直使用的虚拟机,由于需要一些测试环境等,会经常使用多个虚拟机.经常捣腾.之前有涉及到一些virtualbox方面的问题的处理,并没有记录下来, ...

  7. 用KMP征服循环节问题

    以前我还是写过KMP的文章的 现在我们可以求一下循环节啊 Slot Machines Gym - 101667I #include<bits/stdc++.h> using namespa ...

  8. BZOJ 2780 [Spoj]8093 Sevenk Love Oimaster ——广义后缀自动机

    给定n个串m个询问,问每个串在n个串多少个串中出现了. 构建广义后缀自动机,(就是把所有字符串的后缀自动机合并起来)其实只需要add的时候注意一下就可以了. 然后对于每一个串,跑一边匹配,到达了now ...

  9. BZOJ2741 【FOTILE模拟赛】L 【可持久化trie + 分块】

    题目 FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max(Ai xor Ai+1 xor Ai+2 ... xor Aj) ...

  10. BZOJ 3733 [Pa2013]Iloczyn 模拟爆搜

    Description 给定正整数n和k,问能否将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示测试组数 接下来T行每行两个数n(n<=10^9),k(k& ...