【链表篇】牛客刷题周记
题目1:JZ3 从尾到头打印链表
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
//std::cout<<"head:"<<"value"<<head->val<<std::endl;
//std::cout<<"nex"<<head->next->val<<std::endl;
ListNode* temp_head=head;
vector<int> result;
// 对初始第一个数据进行判断
if(temp_head==NULL)
{
std::cout<<"result"<<std::endl;
return result ;
}
else
{
std::cout<<"ddd"<<std::endl;
while(temp_head!=NULL)
{
std::cout<<"value:"<<temp_head->val;
int num=temp_head->val;
result.push_back(num);
temp_head=temp_head->next;
}
}
//利用迭代器进行翻转
// vector<int>::reverse_iterator riter;
// for (riter=result.rbegin();riter!=result.rend();riter++)
// {
// result_rever.push_back(*riter);
// }
std::reverse(result.begin(),result.end());
return result;
}
};
总结:暂时的思路还是比较简单
step1: 什么是链表,链表就是一个value和指向下一个数的指针,只要知道如何打印出这组数--》知道如何去遍历链表,也就是判断链表最后一个数据指针为空
step2: 将这组数据进行翻转
JZ15 反转链表
暂时看不懂,知道答案也看不懂,对于链表如何链接起来有疑问
JZ38 二叉树的深度
利用递归的思想去解决二叉树深度
注意点: 一定要写清楚截止条件
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int TreeDepth(TreeNode* pRoot) {
int depth=0;
if(pRoot==NULL)//等价if(!pRoot)
{
std::cout<<"到达递归截止条件:"<< pRoot->val<<std::endl;
return 0 ;
}
depth=max(1+ TreeDepth(pRoot->left),1+TreeDepth(pRoot->right));
return depth;
}
};