从上千份大厂面经呕心沥血整理:大厂高频手撕面试题(数据结构和算法篇 ,C++实现亲试可跑)

目录

 怎么判断两个链表是否相交?怎么优化?(字节跳动、货拉拉)

手撕冒泡排序(美团)

手撕快速排序(作业帮)

手撕堆排序(美团)

手撕归并排序(美团)

手撕二分查找(VIVO)

字符串的全排列(要求去重)(字节跳动)

求一个字符串中最长不重复子串的长度(字节跳动)

 反转字符串的单词:如何在原字符串上翻转字符串(如将 "i am student" 翻转为 "student am i"),要求空间复杂度为 O (1)?(字节跳动、美团、滴滴)

压缩字符串题wsssgkeghh 变为 w3sgkeg2h(云从科技)

单链表反转(贝壳)

反转链表中前 K 个节点

 删除字符串中的字符。

求数组的全排列(VIVO) 

合并两个有序数组或有序链表(字节跳动、货拉拉)


 怎么判断两个链表是否相交?怎么优化?(字节跳动、货拉拉)

判断两个链表是否相交可以采用多种方法。

一种方法是使用双指针。首先分别遍历两个链表,得到两个链表的长度。然后让长链表的指针先走两个链表长度差的步数。之后,同时移动两个链表的指针,每次比较两个指针是否指向相同的节点。如果指向相同节点,那么这两个链表相交;如果直到指针都走到链表末尾还没有相同节点,那么这两个链表不相交。

#include <iostream>
using namespace std;

// ListNode 定义
class ListNode {
public:
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

class Solution {
public:
    bool isIntersect(ListNode* headA, ListNode* headB) {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大模型大数据攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值