首页 > 其他分享 >9.25度小满一面

9.25度小满一面

时间:2024-09-28 13:47:52浏览次数:8  
标签:一面 slow ListNode 9.25 fast next 链表 度小满 l1

1.map的底层

2.unorder_map哈希表有自己实现过吗?哈希冲突

3.poll和epoll和select的优缺点、

4.线程同步机制是用来做什么的?

5.五子棋项目问题--

算法题:

6.LeetCode.重排链表

给定一个单链表 L 的头节点 head ,单链表 L 表示为:  L0 → L1 → … → Ln-1 → Ln  请将其重新排列后变为: L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

 

平时真的应该好好练算法 ,当时就给十分钟,没撕出来,wwww~~~~

思路:这道题就是相当于将三个简单题结合起来了,分别是

876.链表的中间节点

这里要明白一个概念,定义快慢指针,同时指向头结点,让它们俩同时移动,slow移动一个节点,fast移动两个节点,当fast指向空时,slow一定指向中间节点。是因为每次fast比slow快移动一个,fast的速度是slow的2倍,而当fast指向末尾时,slow刚好移动fast的一半距离,所以说slow指向了链表的中间节点。

206.翻转链表

最后就是合并链表

将这个题拆分一下就不难了,首先是找到链表的中间节点,

 ListNode* findMid(ListNode* head){//找到中间节点
        ListNode* slow=head;
        ListNode* fast=head;
        while(fast!=nullptr&&fast->next!=nullptr){
            fast=fast->next->next;
            slow=slow->next;
        }
        return slow;
    }

 然后是翻转链表

  ListNode* reverseList(ListNode* head){//翻转后端节点
        ListNode* prev=nullptr;
        ListNode* cur=head;
        while(cur!=nullptr){
            ListNode* temp=cur->next;
            cur->next=prev;
            prev=cur;
            cur=temp;
        }
        return prev;
    }

 最后是合并链表,合并链表的思想如下图所示

首先,将中点作为头结点,然后将后端链表进行翻转,

代码如下所示:

合并思路跟上面的黄线是一样的。要注意通过l1_temp来存储l1的下一个节点的地址,防止丢失

 void merge(ListNode* l1,ListNode* l2){
        ListNode* l1_temp;
        ListNode* l2_temp;
    while(l1!=nullptr&&l2!=nullptr){
            l1_temp=l1->next;
            l2_temp=l2->next;

            l1->next=l2;
            l1=l1_temp;

            l2->next=l1;
            l2=l2_temp;
        }
    }

标签:一面,slow,ListNode,9.25,fast,next,链表,度小满,l1
From: https://blog.csdn.net/m0_62956971/article/details/142526446

相关文章

  • 9.25博客(动手动脑)
    四则运算importjava.util.Random;importjava.util.Scanner;publicclassArithmeticQuizGenerator{//主方法publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);Randomrandom=newRandom();//用户可以选择生成题目......
  • 美团一面:给定两棵二叉树 `A` 和 `B`,判断 `B` 是否是 `A` 的子结构?
    目录标题问题描述思路分析代码解释详细步骤复杂度分析问题描述给定两棵二叉树A和B,判断B是否是A的子结构。所谓子结构是指B中任意节点在A中存在相同的结构和节点值。例子1:输入:tree1=[1,7,5],tree2=[6,1]输出:false解释:tree2与tree1的一个子树......
  • 9.25每日总结 OpenFeign
    OpenFeign利用Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。但是远程调用的代码太复杂了:而且这种调用方式,与原本的本地方法调用差异太大,编程时的体验也不统一,一会儿远程调用,一会儿本地调用。用到OpenFeign组件了。其实远程调用的关键点就在于四个:请求方式......
  • 京东YOUNG-后端实习一面凉经
    文章目录声明Java基础1.Java语言有哪些特点?2.Java虚拟机如何实现平台无关性?3.String和StringBuffer的区别4.Stringstr1="a";Stringstr2="b";Stringstr3=str1+str2;这个过程一共创建了几个对象?JUC1.什么是线程和进程?进程和线程的区别是什么?2.什么是......
  • 2023.9.25 近期练习
    CF1261FXor-Set我们把\(A,B\)集合分别处理,把其拥有的区间放到字典树上,就会拆成\(O(n\logV)\)个区间。考虑其两两组合,每个区间都是形如前面若干位确定,后面\(x\)位任意。两个区间组合,就是取\(x\)更大的那个后面都是任意的,前面的若干位合并起来即可。但是这样就会有\(......
  • leetcode每日一题day15(24.9.25)——公司命名
    思路:首先如果没有相同的后缀,则无论只要不是相同的首字母交换都不会出现重复情况,如果有重复后缀,则还需多增加个不能和,首字符与另一相同后缀字串的首字符相同的字串交换。主要矛盾已经明确,则可对矛盾进行分析。首先把范围缩小到只有两种不同首字母,对于这种情况      ......
  • 2024.9.25 Python,单词替换,优美的排列 II,sort的用法前K个高频单词,广度优先搜索腐烂的橘
    1.单词替换在英语中,我们有一个叫做词根(root)的概念,可以词根后面添加其他一些词组成另一个较长的单词——我们称这个词为衍生词(derivative)。例如,词根help,跟随着继承词“ful”,可以形成新的单词“helpful”。现在,给定一个由许多词根组成的词典dictionary和......
  • 2024.9.25训练记录
    上午whk下午noip模拟T1:结论题。考场想不出来。只需要顺序做第一个1前的数。原因:考虑三个数时的情况。顺序是\((a^b)^c\)或者\(a^{(b^c)}\)。相当于,比较\(b^c\)和\(bc\)的大小。显然有:\(b,c\geq2\)时,\(b^c\geqbc\)。所以按照正常顺序做,在\(A_i\geq2\)时......
  • 9.25日总结
    单向链表单向链表是最基本的一种链表形式。每个节点包含一个数据元素和一个指向下一个节点的指针。单向链表的优点在于实现简单,插入和删除操作方便。缺点是只能从头节点开始遍历整个链表,访问效率较低。双向链表双向链表在单向链表的基础上增加了前驱节点指针,使得可以从任意......
  • 9.25
    2021csp-jT1[CSP-J2021]分糖果题目描述红太阳幼儿园有n个小朋友,你是其中之一。保证n>=2。有一天你在幼儿园的后花园里发现无穷多颗糖果,你打算拿一些糖果回去分给幼儿园的小朋友们。由于你只是个平平无奇的幼儿园小朋友,所以你的体力有限,至多只能拿R块糖回去。但是拿的太少......