链表面试题2

news/2024/9/23 14:36:24/

 

1,合并两个有序链表

 

我们先定义一个虚拟节点newH, 然后按照上图所走,但是当其中一个链表走空时,我们只需返回另一个链表即可

class Solution {public ListNode mergeTwoLists(ListNode headA, ListNode headB) {ListNode newhead =new ListNode();ListNode tmp = newhead;while(headA != null && headB != null){if(headA.val<headB.val){tmp.next=headA;headA=headA.next;tmp=tmp.next;}else{tmp.next=headB;headB=headB.next;tmp=tmp.next;}}if(headA==null){tmp.next=headB;}if(headB==null){tmp.next=headA;}return newhead.next;}
}

2,回文链表

 

 我们第一步先找中间节点,然后翻转中间节点以后的部分,再设置循环让 head= head.next;
         与   slow = slow.next;一步一步对比是否一致,一致则证明是回文链表

如果链表为偶数长度则比较head.next ==slow,如果一致则为回文链表

public class PalindromeList {public boolean chkPalindrome(ListNode head) {// write code hereif(head == null){return true;}//找中间节点ListNode fast = head;ListNode slow = head;while(fast != null && fast.next!=null){fast = fast.next.next;slow = slow.next;}//翻转链表ListNode cur = slow.next;while(cur !=null){ListNode curN=cur.next;cur.next = slow;slow = cur;cur = curN;}//slow从后往前 head从  前往后 直到相遇while(head!=slow){if(head.val != slow.val){return false;}if(head.next ==slow){return true;}head= head.next;slow = slow.next;}return true;}
}

3,相交链表 

 

 

 

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {//假设A链表长ListNode pl = headA;ListNode ps = headB;int lenA =0;int lenB = 0;while(pl != null){lenA++;pl = pl.next;}while(ps != null){lenB++;ps = ps.next;}//要重新赋值pl=headA;ps=headB;int len = lenA - lenB;//2,判断len是证书还是负数if(len <0){pl =headB;ps = headA;len = lenB- lenA;}//上述代码走完pl指向最长链表ps指向最短链表//len一定为正数//3,让长链表pl走 len步while(len != 0){pl=pl.next;len--;}//4,一起走直到相遇while(pl != ps){pl = pl.next;ps = ps.next;}if(pl == null){//如果两个引用都为空 返回nullreturn null;   }return pl;}
}

 


http://www.ppmy.cn/news/1449300.html

相关文章

帕金森患者应该怎么注意生活方式?

在面对帕金森病的挑战时&#xff0c;科学合理地改善日常生活方式&#xff0c;不仅能帮助患者更好地管理病情&#xff0c;还能提升生活质量。今天&#xff0c;让我们一起探索如何通过简单的日常调整&#xff0c;为患有帕金森病的朋友们带来积极的变化。 饮食调整&#xff1a;营养…

制作一个RISC-V的操作系统十五-软件定时器

文章目录 定时器分类定时器相关分类软件定时器设计初始化创建删除触发流程图形示意 优化代码 定时器分类 硬件定时器&#xff1a;由硬件频率和触发限制的大小决定&#xff0c;只有一个&#xff0c;精度高 软件定时器&#xff1a;基于硬件定时器实现&#xff0c;精度大于等于硬…

indexedDB---浏览器内建的数据库(学习记录)

IndexedDB IndexedDB 是一个浏览器内建的数据库&#xff0c;它比 localStorage 强大得多。 通过支持多种类型的键&#xff0c;来存储几乎可以是任何类型的值。支撑事务的可靠性。支持键值范围查询、索引。和 localStorage 相比&#xff0c;它可以存储更大的数据量。 要注意的…

Ubuntu20.04 [Ros Noetic]版本——在catkin_make编译时出现报错的解决方案

今天在新的笔记本电脑上进行catkin_make的编译过程中遇到了报错&#xff0c;这个报错在之前也遇到过&#xff0c;但是&#xff0c;我却忘了怎么解决。很是头痛&#xff01; 经过多篇博客的查询&#xff0c;特此解决了这个编译报错的问题&#xff0c;于此特地记录&#xff01;&…

Unity LensFlare 入门

概述 在项目的制作过程中&#xff0c;太阳光的使用一定是不可缺少的部分&#xff0c;但是如果想实现真实太阳光眼睛看到的镜头炫光效果&#xff0c;那这部分的内容一定不要错过喔&#xff0c;接下来让我们来学习这部分的内容吧&#xff01; Hale(光环效果) Color&#xff1a;…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.5--I.MX6U启动方式

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Java零基础入门到精通_Day 9

1.ArrayList 编程的时候如果要存储多个数据&#xff0c;使用长度固定的数组存储格式&#xff0c;不一定满足我们的需求&#xff0c;更适应不了变化的需求&#xff0c;那么&#xff0c;此时该如何选择呢? 集 合 集合类的特点:提供一种存储空间可变的存储模型&#xff0c;存储的…

Xcode15安装iOS17模拟器及显示iOS真机

前言 升级完Xcode15之后&#xff0c;本地模拟器 Simulator 全被清空&#xff0c;真机也不显示&#xff08;&#x1f634;惑&#xff09;&#xff0c;编译按钮也无法点击&#xff0c;只有一个选项&#xff08;如下图所示&#xff09;。 点击下面的管理设备&#xff0c;可以显示…