小萌新开始做题啦!----------相交链表
总算开始了第一次的博客。内心战战兢兢o(╥﹏╥)o
下面来自LeetCode的一道链表题。
题目描述:
编写一个程序,找到两个单链表相交的起始节点。
如下面的两个链表:
在节点 c1 开始相交。
注意:
1.如果两个链表没有交点,返回 null.
2.在返回结果后,两个链表仍须保持原有的结构。
3.可假定整个链表结构中没有循环。
4.程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists
解题思路:
刚拿到题目,想的是对A的每一个结点,遍历B并且寻找第一个相同的结点,时间复杂度为O(mn)!!!!
但题目要求时间复杂度为O(n),然后再想一下,................
思路大概是对AB两个链表分别遍历进行比较,但是必须是相同长度的链表,那么就先把长链表在与短链表相交前多出来的部分截掉,所以就是先求长度,将长链表在(长链表.length - 短链表.length)处开始遍历,短链表从头遍历,然后相同时就是相交的结点处,返回,如果两个链表没有相交,则两指针最终都指向Null,则返回Null,Over~
我的代码:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/public class Solution {public static int getLength(ListNode head){int count=0;ListNode cur=head;while(cur!=null){cur=cur.next;count++;}return count;}public ListNode getIntersectionNode(ListNode headA, ListNode headB) {int a=getLength(headA);int b=getLength(headB);ListNode cur1=headA;ListNode cur2=headB;if(a>=b){for(int i=0;i<a-b;i++){cur1=cur1.next;}}else{for(int i=0;i<b-a;i++){cur2=cur2.next;}}while(cur1!=null&&cur1!=cur2){cur1=cur1.next;cur2=cur2.next;}return cur1;}
}
看着自己的代码,emmmmmmmm,自我感觉良好,然后秉着学习的态度,就去评论区逛了一下,噗,果然我就是个萌新。
大佬的优雅代码:
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA == null || headB == null) return null;ListNode pA = headA, pB = headB;while (pA != pB) {pA = pA == null ? headB : pA.next;pB = pB == null ? headA : pB.next;}return pA;
}
原理应该就是,利用(a+b).length=(b+a).length,a是链表A除相交部分,b是链表B除相交部分。这段代码不仅省去了求长度差的时间,代码本身还简洁了不少,简直赏心悦目。
小萌新膝盖奉上。
感受:
最近总算知道要开始好好学习了,突然感觉学习的感觉真的炒鸡棒,理解了任何一点知识都会有一丝小开心~快让我沉浸于学习
这是博主第一次写博客,因为刚学Java不久,所以可能会有一些知识的欠缺导致一些错误,看到麻烦各位大佬在线指导~
小萌新开始做题啦!----------相交链表相关推荐
- 小萌新准备参加五一建模大赛纪实
小萌新准备参加五一数学建模大赛纪实 2020.4.20 2020.4.21 2020.4.22 2020.4.28 2020.5.1 本萌新在对数学建模一无所知的情况下,被邀请一起参加数学建模比赛,虽 ...
- 浙江杭电计算机系的秦嘉珩,迎新季丨@2019级杭电小萌新,你们的最美辅导员上线啦!...
原标题:迎新季丨@2019级杭电小萌新,你们的最美辅导员上线啦! 2019级小萌新们 欢迎大家加入杭州电子科技大学 在即将开启的四年大学生活中 有这样一位亲切的老师 陪你军训,与你谈心,为你保驾护航 ...
- 关于看雪安全峰会--web小萌新的内心独白
这次的看雪安全峰会是看雪举办的第一届安全峰会,看雪作为国内二进制的黄埔军校,已经走过了17个年头,看雪培养了大批的安全人才,所以这次峰会可以说是安全圈特别是二进制圈大佬们的分享.聚会.作为一个web小 ...
- 来自某位小萌新的Web安全学习--day1
标题草草介绍一哈哈: 哈喽!大家好!这里是网安一名小萌新发来的报道.19级网络空间安全本科生.现在的时间应该是2021-7-14日,正是大二升到大三的暑假阶段.由于前两年种种原因导致我个人的学习方向有 ...
- c++实现含有中文字符的字符串逆转,如:“我是小萌新”转换成“新萌小是我”
一个中文字符占两字节,所以逆转也得两两字符进行逆转,如上图 可得出0和8,1和9,2和6,3和7进行下标交换 由此可得出以下代码: #include <iostream> #include ...
- 萌新自己做的 pixi 宝藏猎人小游戏
预览图(写的是默认全屏的,这是手机端效果) ps: 不要吐槽我的游戏元素截图谢谢,不想用ps了-本来有个门是要勇者带着宝箱回去的,不想做了- 做的是键盘控制移动的 主角是手写的监听点击事件,有点low ...
- [租房]刚步入社会的小萌新,休想坑小妹妹,安排!
这段时间没有更文,学校的事儿和工作上的事儿挤在一起.这一篇给大家分享下关于应届生找房的点滴吧,也是自己在找房过程中的一点体会,对于考研或者最近出去找工作的适用,选择性查看.对了,不会有十全十美的,需要 ...
- java小光棍数_java做题记录第4期
4.1 幸运数 4.1_1题目描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成. 首先从1开始写出自然数1,2,3,4,5,6,.... 1 就是第一个幸运 ...
- 小萌新的python进阶之路(一)
很早之前写过一篇blog为了记录自己自学java的整个过程,可是由于生(lan)活(de)所(geng)迫(xin)和一些生活上的原因,中断了学习,也停止了更博. 今天新开这篇博客是因为自己真正用上了 ...
最新文章
- 给图像特征提取开个“ViP”是什么效果?字节牛津提出视觉解析器,全面超越HaloNet!...
- 在特定索引处插入字符串
- html自适应pc窗口大小_自适应技术很难吗?为什么Shopyy平台将网站分为PC端和移动端...
- android状态栏半透明灰色,Android7.0沉浸式状态栏蒙灰问题完美解决
- c语言最小点对问题_C语言教程(一):程序开发理论基础!
- 苹果x为什么是android,技术角度分析:这就是苹果手机和安卓手机为什么有差距的主要原因...
- syn攻击 喝茶_如何喝茶
- 超链接一般有两种表现形式_外链的三种常见表现形式
- java例程练习(数组复制与arraycopy)
- Topic 9. SCI 文章第二张表—单因素回归分析表
- 井字棋游戏的实现和注意细节
- 火狐插件(fireBug)
- Mybatis“四大神兽”
- DBCO-PALA-b-PEG DBCO-聚硫辛酸-聚乙二醇
- 操作系统正则符号知识点总结
- android 模拟器截屏 保存到模拟器,天天模拟器屏幕截图保存在哪里?天天模拟器图库位置介绍...
- JVM内存Dump原理与在线分析实战 | 得物技术
- 目标检测的国内外研究现状
- 一个大一程序员的反思
- 电视剧看合适的即可发生的方式根深蒂固