【链表篇】牛客刷题周记

 题目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;
    }
};