有的时候面试为了节约时间问下面试官是否可以写主函数。但是为了不亏,可以写完结构体和class,然后有时间可以继续下面的main函数完成输入~~
所以我们以后涉及到链表题目,只需要写模块1 和模块2即可,后面的main看情况。
//自己定义结构体实现反转链表
#include<bits/stdc++.h>
using namespace std;
struct ListNode{
int val;
ListNode* next;
ListNode():val(0),next(nullptr){}
ListNode(int x):val(x),next(nullptr){}
};
//
class Solution {
public:
ListNode* reverseList(ListNode* head){
ListNode* pre=nullptr;
ListNode*curr=head;
while(curr){
ListNode* next=curr->next;
curr->next=pre;
pre=curr;
curr=next;
}
return pre;
}
};
int main(){
int M=5;
vector<int>nums(5);
ListNode* dump=new ListNode();
ListNode* head=dump;
for(int i=0;i<5;i++){
cin>>nums[i];
head->next=new ListNode(nums[i]);
head=head->next;
}
head->next=nullptr;
head=dump->next;
Solution b;
ListNode* res=b.reverseList(head);
for(int i=0;i<M;i++){
cout<<res->val<<' ';
res=res->next;
}
return 0;
}
链表相交
#include<bits/stdc++.h>
using namespace std;
//定义结构体
struct ListNode{
int val;
ListNode* next;
ListNode():val(0),next(nullptr){}
ListNode(int x):val(x),next(nullptr){}
};
//定义函数类
class Solution {
public:
ListNode *merge(ListNode *headA, ListNode *headB) {
if (headA == nullptr || headB == nullptr) {
return nullptr;
}
ListNode *pA = headA, *pB = headB;
while (pA != pB) {
pA = pA == nullptr ? headB : pA->next;
pB = pB == nullptr ? headA : pB->next;
}
return pA;
}
};
int main(){
//第一条链表
ListNode* res=new ListNode();
ListNode* l1=res;
//第二条链表
ListNode* res2=new ListNode(0);
ListNode* l2=res2;
for(int i=1;i<=4;i++)
{
int temp;
cin>>temp;
res->next=new ListNode(temp);
res=res->next;
res->next=nullptr;
}
//回到开头
res=l1;
for(int i=1;i<=2;i++)
{
res=res->next; // 2
}
l1=l1->next; //1 2 3 4
/1111111
///产生新l2
res2->next=res;
//完成链表1
Solution p;
ListNode* RR= p.merge(l1,l2);
/输出结果
while(RR)
{
int t=RR->val;
cout<<t<<' ';
RR=RR->next;
}
return 0;
}