int mySqrt(int x){
int low=0,high=x,ans=-1;
while(low<=high){
int mid=(low+high)/2;
if((long)mid*mid<=x){
ans=mid;
low=mid+1;
}else
high=mid-1;
}
return ans;
}
不断采用二分的方式找到中间值,平方和x比较 需要注意越界的情况
翻转二叉树
struct TreeNode* invertTree(struct TreeNode* root) {
if (root == NULL) {
return NULL;
}
struct TreeNode* left = invertTree(root->left);
struct TreeNode* right = invertTree(root->right);
root->left = right;
root->right = left;
return root;
}
反转链表
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* prev=NULL;
struct ListNode* p=head;
while(p!=NULL){
struct ListNode* next=p->next;
p->next=prev;
prev=p;
p=next;
}
return prev;
}
定义一个结点存储前一个结点prev
定义一个结点存储后一个结点next
定义一个结点存储头节点p=head
循环p不为空
定义next向后去
p->next=prev p指向前面一个结点prev (此时p断链了,后面需要p=next重新连接上这个链表)
prev=p pre向后移动一个节点
p=next;由于 p->next=prev这一步导致断链了,所以重新链接回链表