刚刚面完腾讯软件开发实习的初试,也是我第一次视频面试😂,前二十分钟都是问八股文,接着来了一个算法题“删除链表中倒数第k个节点”。我一看这不是送分题吗哈哈哈,然后发觉不太对劲,这根平时在力扣上刷题特么不一样啊。
平时刷题的做法
链表都是已经构造好的,我们只需要实现一个函数就行了,输入输出也不用考虑,19. 删除链表的倒数第 N 个结点 ,代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
int len = 0;
for (auto p = head; p; p = p->next) len ++ ; //先求出链表长度
auto dummy = new ListNode(0, head), p = dummy;
for (int i = 1; i < len - n + 1; i ++ ) p = p->next; //遍历到倒数第n个节点
p->next = p->next->next; //跳过该节点
return dummy->next;
}
};
面试时的做法
腾讯用的是一个叫面呗的平台,面试官远程看着你写代码,跟AcWing一样是要从0开始写一个完整的cpp文件。这里需要你自己构造链表,自己想测试数据,自己输入输出,于是代码就变成了下面这样:
#include <iostream>
using namespace std;
struct ListNode //链表结构体模板
{
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
ListNode* creat(int n) //链表构造模板
{
ListNode* dummy = new ListNode(0);
auto pre = dummy;
for (int i = 0; i < n; i ++ )
{
auto p = new ListNode(0);
cin >> p->val;
pre = pre->next = p;
}
return dummy->next;
}
int main()
{
int n, k;
cin >> n >> k;
ListNode* head = creat(n);
auto dummy = new ListNode(0, head), p = dummy;
for (int i = 0; i < n - k; i ++ ) p = p->next; //遍历到倒数第n个节点
p->next = p->next->next; //跳过该节点
dummy = dummy->next;
while (dummy)
{
cout << dummy->val << ' ';
dummy = dummy->next;
}
return 0;
}
然后自己想一个数据来测试比如:
5 2
4 5 8 12 9
至此这道题才算是做完了。当时我冥思苦想了十分钟,然后跟面试官说我不会构造链表🤣,然后面试官给我换了个高精度加法题,跟 791. 高精度加法 这个题一模一样,然后分分钟做出来了。主要是想说,对于要找工作面试的同学,链表、二叉树的构造还得多看看。当然也可以像Y总在算法基础课里那样用数组模拟链表,当时我力扣刷多了,已经忘了怎么模拟了。
我也在面腾讯 一起加油
那必须的,加油😘
我: 我不会构造链表......
面试官: 好的, 今天先到这, 回去等通知吧.
哈哈,这倒不会。现在面试官都挺通情达理的,不会的问题就说不会他给你换一个就行。八股文也会提前问你对这个方向熟悉不,根据你熟悉程度来提问,不了解的方向就直接不问了。
太强了
这面试有够恶心的啊。。还以为都是leetcode那种。另外想问问八股文指啥,已经您是怎么准备的呢
八股文就是C、数据结构、操作系统、计算机网络、Linux、数据库等等知识,比如昨天问了C的智能指针有有哪几种有何区别?快排如何优化?进程线程的区别?简单介绍TCP三次握手四次挥手,如何防止当前TCP连接接收到上一个TCP连接发来的重复报文(TIME_WAIT)?Linux如何查看一个进程的CPU占用?MySQL的索引是如何实现的?暂时就回忆起来这些
八股文,可以看这个帖子,总结得非常好,我也正在背。其实背八股文也是有好处的,可以让你迅速建立起知识体系框架,把各部分看似不相关的东西都串联起来。
好滴,感谢您!