广州专业网站建设哪家好,亚太建设科技信息研究院网站,网站推广优化怎么做最好,怎样给网站做备案文章目录 一、24. 两两交换链表中的节点1.题目简介2.解题思路3.代码4.运行结果 二、50. Pow(x, n)1.题目简介2.解题思路3.代码4.运行结果 三、2331. 计算布尔二叉树的值1.题目简介2.解题思路3.代码4.运行结果 总结 一、24. 两两交换链表中的节点
1.题目简介
24. 两两交换链表… 文章目录 一、24. 两两交换链表中的节点1.题目简介2.解题思路3.代码4.运行结果 二、50. Pow(x, n)1.题目简介2.解题思路3.代码4.运行结果 三、2331. 计算布尔二叉树的值1.题目简介2.解题思路3.代码4.运行结果 总结 一、24. 两两交换链表中的节点
1.题目简介
24. 两两交换链表中的节点 给你一个链表两两交换其中相邻的节点并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题即只能进行节点交换。
2.解题思路
递归思路 先处理第二个节点之后的节点再将前两个节点进行交换最后连接后面处理好的节点
迭代思路 双指针法(三指针法) 两个指针进行交换第三个指针进行遍历直到将链表遍历结束
3.代码
递归
/*** 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* swapPairs(ListNode* head) {if(head nullptr || head - next nullptr) return head;ListNode* t head - next - next;ListNode* next head - next;next - next head;head - next swapPairs(t);return next;}
};迭代
/*** 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* swapPairs(ListNode* head) {if(head nullptr || head - next nullptr) return head;ListNode* prev head,* cur head - next,* next cur - next;ListNode* newhead cur;int flag 1;//假设链表的节点个数为偶数while(next){cur - next prev;if(next - next)//链表的节点个数是偶数个或者未到达链表结尾{prev - next next - next;cur next - next;prev next;next cur - next;}else//如果链表的结点个数是奇数个{flag 0;prev - next next;next next - next;}}if(flag){cur - next prev;prev - next next;}return newhead;}
};4.运行结果
递归 迭代
二、50. Pow(x, n)
1.题目简介
50. Pow(x, n)
2.解题思路
思路先计算x的n / 2次再相乘(注意n的正负性和奇偶性) 因为可能会出现n是INT_MIN的情况因为-INT_MIN会导致溢出所以我们将n的类型改为long long。
3.代码
class Solution {
public:double myPow(double x, int n) {return n 0 ? 1 / func(x, -(long long)n) : func(x, n);}double func(double x, long long n){if(n 0) return 1.0;double t myPow(x, n / 2);double ret t * t;if(n % 2) ret * x;return ret;}
};4.运行结果 三、2331. 计算布尔二叉树的值
1.题目简介
2331. 计算布尔二叉树的值
2.解题思路
先计算孩子节点再根据孩子节点的布尔值和自身所表示的运算符来计算自身的布尔值
3.代码
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/class Solution {
public:bool evaluateTree(TreeNode* root) {if(root - val 0) return false;if(root - val 1) return true;if(root - val 2) return evaluateTree(root - left) || evaluateTree(root - right);return evaluateTree(root - left) evaluateTree(root - right);}
};4.运行结果 总结
今天是递归、搜索与回溯算法练习的第2天 坚持就是胜利继续加油。 如果本篇文章对你有所启发的话希望可以多多支持作者谢谢大家