是oppo校招笔试的一道题目,提交完后题目找不到了qwq
笔试一共20个选择题+3个编程题,时间2个小时
期中选择题考点:sql语句,死锁,一个Java派生类初始化过程中构造函数的调用顺序,计算机网络(主要是网络层和传输层),数据结构
思路:递归
AC代码:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param node1 ListNode类
* @param node2 ListNode类
* @return ListNode类
*/
ListNode* combineTwoDisorderNodeToOrder(ListNode* node1, ListNode* node2) {
// write code here
int n1=0,n2=0;
for(ListNode * p=node1;p!=NULL;p=p->next)n1++;
for(ListNode * p=node2;p!=NULL;p=p->next)n2++;
if(n1==1&&n2==1){
if(node1->val<node2->val){
node1->next=node2;
node2->next=NULL;
return node1;
}else {
node2->next=node1;
node1->next=NULL;
return node2;
}
}
ListNode * p1=node1,*p2=node2,*q;
if(n1>1){
for(int i=0;i<n1/2;++i){
q=p1;
p1=p1->next;
}
q->next=NULL;
node1=combineTwoDisorderNodeToOrder(node1,p1);
}
if(n2>1){
for(int i=0;i<n2/2;++i){
q=p2;
p2=p2->next;
}
q->next=NULL;
node2=combineTwoDisorderNodeToOrder(node2,p2);
}
p1=node1;p2=node2;
ListNode * ans=NULL,* root;
while(p1!=NULL&&p2!=NULL){
if(p1->val<p2->val){
if(ans==NULL){
ans=p1;
root=ans;
}
else {
ans->next=p1;
ans=p1;
}
p1=p1->next;
}else {
if(ans==NULL){
ans=p2;
root=ans;
}
else {
ans->next=p2;
ans=p2;
}
p2=p2->next;
}
}
while(p1!=NULL){
ans->next=p1;
ans=p1;
p1=p1->next;
}
while(p2!=NULL){
ans->next=p2;
ans=p2;
p2=p2->next;
}
ans->next=NULL;
return root;
}
};