链表题目总结(第二篇)

第一篇里面的问题都是操作一个链表的情况,这一篇主要说说多个链表的一些问题

  (1)合并两个已经排序好的链表

//l1, l2两个指针不断的后移
ListNode *MergeSortedLists(ListNode *l1, ListNode *l2) {
        ListNode newhead(0), *pos = &newhead;
        while(l1 || l2){
            if(!l1) return (pos->next = l2, newhead.next);
            if(!l2) return (pos->next = l1, newhead.next);
            (l1->val < l2->val)? (pos = pos->next = l1, l1 = l1->next) : (pos = pos->next = l2, l2 = l2->next);
        }
        return newhead.next;
    }   

  (2)判断两个无环链表是否相交

// 判断两个链表是否相交,只需要判断两个链表最后一个节点是否为同一个即可
bool isMeetList(ListNode *pHead1, ListNode *pHead2){
    if(!pHead1 || !pHead2)  return false;
    ListNode *pos1 = pHead1, *pos2 = pHead2;
    while(pos1->next){
        pos1 = pos1->next;
    }
    while(pos2->next){
        pos2 = pos2->next;
    }
    return pos1 == pos2;
}

  (3)寻找两个无环链表第一个相交点

// 找到两个链表第一个相交点,首先遍历两个链表,得到两个链表的长度,比如说l1, l2
// 然后先移动较长的那个链表(比如l1>l2),移动l1-l2步,这样双方剩余的节点数就相等了
// 接着以前往后走,第一次相遇的点就是答案
ListNode *getFirstMeet(ListNode *pHead1, ListNode *pHead2){
    if(!pHead1 || !pHead2)  return NULL;
    ListNode *pos1 = pHead1, *pos2 = pHead2;
    int l1 = 0, l2 = 0;
    while(pos1->next){
        l1++;
        pos1 = pos1->next;
    }
    while(pos2->next){
        l2++;
        pos2 = pos2->next;
    }
    if(pos1 != pos2)    return NULL;
    pos1 = l1 > l2? pHead1 : pHead2;
    pos2 = l1 > l2? pHead2 : pHead1;
    int count = l1 > l2? l1 - l2 : l2 -l1;
    while(count-- > 0){
        pos1 = pos1->next;
    }
    while(pos1 && pos2){
        if(pos1 == pos2)    return pos1;
        pos1 = pos1->next;
        pos2 = pos2->next;
    }
}

  

时间: 2024-10-12 20:22:07

链表题目总结(第二篇)的相关文章

深夜睡不着,第二篇随笔,说说js的创建实例化过程

媳妇白天加班太累了,我呢,白天睡太多了,晚上太过于亢奋,自己一个人偷偷的拿着笔记本到客厅写博客~ 上一篇可能很多人看到了觉得就是个joke,那个真的是一个joke,但是在实际开发过程中,很多年轻的coder对于写不写分号很不以为然,要知道,真实生产环境下的代码要远比我栗子中给的代码要复杂得多,因此很有可能不用我的误导,你就看不出来,因此浪费了一下午的宝贵开发时间,所以写代码还是要规范一些. 第二篇文章我依旧不想讲太过于深入的技术,还是说两个“花边新闻”,聊以自慰罢了,看官有兴致你就看,没兴致也可

【转】Cache Buffer Chain 第二篇

文章转自:http://m.bianceng.cn/database/Oracle/201407/42884.htm 测试环境:版本11gR2 SQL> select * from v$version where rownum=1; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Releas

《你的灯亮着吗》阅读笔记之第一篇与第二篇

首先我看到的是“走出问题的乌托邦”,这小小的七个段落就我让我有点没有搞懂,感觉像是研究问题的一本哲学书,感觉很苦恼,尤其不爱看书的我加上这样热的天气,让我很烦躁,最终导致对那些绕来绕去的话让我很蒙圈,但是我还是咬牙一个字一个字的坚持读了下来. 我还在想这本书没有目录吗?就是一段段的像是前面七段话这样的文章吗?后来我发现我错了,原来还是有目录的,目录就藏在这七个小小的段落之后,但是看到目录后我更蒙圈了,第一篇:问题是什么?.第二篇:这个问题是什么?.第三篇:什么事真正的问题?.第四篇:这是谁的问题

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位

并发编程之J.U.C的第二篇

并发编程之J.U.C的第二篇 3.2 StampedLock 4. Semaphore Semaphore原理 5. CountdownLatch 6. CyclicBarrier 7.线程安全集合类概述 8. ConcurrentHashMap 3. JDK7 ConcurrentHashMap 3. 性能比较 10. ConcurrentLinkedQueue 11. CopyOnWriteArrayList 3.2 StampedLock 该类自JDK8加入,是为了进一步优化读性能,它的特

Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍

Java并发包下锁学习第二篇队列同步器 还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图: ? 从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本文中,凯哥就用AQS来代替这个类).我们先来了解这个类.对这个类了解之后,学习后面的会更容易了. 本篇是<凯哥(凯哥Java:kagejava)并发编程学习>系列之<Lock系列>教程的第一篇:<Java并发包下锁学习第二篇:队列同步器>. 本文主要内容:同步器介绍:同步器

Android Metro风格的Launcher开发系列第二篇

前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客Android Metro风格的Launcher开发系列第一篇写了如何配置Android开发环境,只是用文字和图片展示了开发Metro风格Launcher的初步设计和产品要求,这一篇文章将会从代码上讲解如何实现对应的UI效果,好了,评书开讲! Launcher主体框架实现: Launcher主体框架我选用的是大家所熟悉的ViewPager控件,因为ViewPager

[C++11新特性]第二篇

0.可变数量参数,可变函数模版,变长模版类 c++98可变数量参数 #include<cstdio> #include<cstdarg> double SumOfFloat(int count, ...) { va_list ap; double sum=0; va_start(ap,count); for(int i=0;i<count;i++) sum+=va_arg(ap,double); va_end(ap); return sum; } int main() { p

第二篇 基于微擎的模块开发—PHP

从陌生到如今能勉强完成第一个微网站模块的实现.也算是一个小小的进步,从设计数据库到,返回数据,前端模版渲染 每一点都是有点难度的.所以我想总结一下,我是如何实现一个微擎模块. 第一,首先得分析某个模块的想实现什么需求,根据需求设计合理的数据库结构. 第二,了解微擎的结构,运行流程,设计模块结构. 第三,重点就是site.php , 完成site.php 需要一定的php的编程能力, 第四,site.php 其中 通过 pdo 从数据库的获取我们想得到数据源. 微擎已封装其路由机制, doWeb