LeetCode算法刷题计划(1)— 基础50题

x33g5p2x  于2021-10-06 转载在 其他  
字(13.0k)|赞(0)|评价(0)|浏览(343)

LeetCode算法刷题计划(1)— 基础50题

自己近几天在LeetCode上面刷的50道基础算法题,下面按照算法类型进行分类

一、malloc

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. vector<int> getConcatenation(vector<int>& nums) {
  6. int n=nums.size();
  7. for(int i=0;i<n;i++){
  8. nums.push_back(nums[i]);
  9. }
  10. return nums;
  11. }
  12. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. vector<int> shuffle(vector<int>& nums, int n) {
  6. for(int i=0;i<2*n;i++){
  7. if(nums[i]>0){
  8. int j=i;
  9. while(nums[i]>0){
  10. j=j<n?2*j:2*(j-n)+1;
  11. swap(nums[i],nums[j]);
  12. nums[j]=-nums[j];
  13. }
  14. }
  15. }
  16. for(auto &num:nums){
  17. num=-num;
  18. }
  19. return nums;
  20. }
  21. };

  1. //时间复杂度:O(10^n)
  2. //空间复杂度:O(10^n)
  3. class Solution {
  4. public:
  5. vector<int> printNumbers(int n) {
  6. vector<int>ans;
  7. int side=0;
  8. while(n--){
  9. side=side*10+9;
  10. }
  11. for(int i=1;i<=side;i++){
  12. ans.push_back(i);
  13. }
  14. return ans;
  15. }
  16. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. vector<int> runningSum(vector<int>& nums) {
  6. for(int i=1;i<nums.size();i++){
  7. nums[i]=nums[i]+nums[i-1];
  8. }
  9. return nums;
  10. }
  11. };

  1. //时间复杂度:O(n*logn)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
  6. vector<pair<int,int>>pairs;
  7. for(int i=0;i<nums.size();i++){
  8. pairs.push_back(make_pair(nums[i],i));
  9. }
  10. sort(pairs.begin(),pairs.end());
  11. vector<int>ans(nums.size());
  12. int pre=-1;
  13. for(int i=0;i<pairs.size();i++){
  14. if(pre==-1||pairs[i].first!=pairs[i-1].first){
  15. pre=i;
  16. }
  17. ans[pairs[i].second]=pre;
  18. }
  19. return ans;
  20. }
  21. };

二、位运算

  1. //时间复杂度:O(2^n)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. int ans=0;
  6. void dfs(int val,int idx,vector<int>&nums){
  7. if(idx==nums.size()){
  8. ans+=val;
  9. return;
  10. }
  11. dfs(val^nums[idx],idx+1,nums);
  12. dfs(val,idx+1,nums);
  13. }
  14. int subsetXORSum(vector<int>& nums) {
  15. dfs(0,0,nums);
  16. return ans;
  17. }
  18. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. vector<int> decode(vector<int>& encoded, int first) {
  6. vector<int>ans(encoded.size()+1);
  7. ans[0]=first;
  8. for(int i=1;i<=encoded.size();i++){
  9. ans[i]=encoded[i-1]^ans[i-1];
  10. }
  11. return ans;
  12. }
  13. };

  1. //时间复杂度:O(1)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. vector<int> swapNumbers(vector<int>& numbers) {
  6. numbers[0]=numbers[0]^numbers[1];
  7. numbers[1]=numbers[0]^numbers[1];
  8. numbers[0]=numbers[0]^numbers[1];
  9. return numbers;
  10. }
  11. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int hammingWeight(uint32_t n) {
  6. int count=0;
  7. while(n!=0){
  8. if((n&1)==1){
  9. count++;
  10. }
  11. n>>=1;
  12. }
  13. return count;
  14. }
  15. };

  1. //时间复杂度:O(logn)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int rangeBitwiseAnd(int left, int right) {
  6. int count=0;
  7. while(left<right){
  8. left>>=1;
  9. right>>=1;
  10. count++;
  11. }
  12. return left<<count;
  13. }
  14. };

  1. //时间复杂度:O(logn)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. uint32_t reverseBits(uint32_t n) {
  6. uint32_t ans=0;
  7. for(int i=0;i<32&&n>0;i++){
  8. ans |= (n&1) << (31-i);
  9. n >>= 1;
  10. }
  11. return ans;
  12. }
  13. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. vector<int> countBits(int n) {
  6. vector<int>dp(n+1,0);
  7. for(int i=1;i<=n;i++){
  8. dp[i]=dp[i>>1]+(i&1);
  9. }
  10. return dp;
  11. }
  12. };

三、计数

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. int numIdenticalPairs(vector<int>& nums) {
  6. int ans=0;
  7. unordered_map<int,int>mp;
  8. mp[nums[0]]=1;
  9. for(int i=1;i<nums.size();i++){
  10. ans+=mp[nums[i]];
  11. mp[nums[i]]++;
  12. }
  13. return ans;
  14. }
  15. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. bool checkIfPangram(string sentence) {
  6. int ans=0;
  7. for(auto c:sentence){
  8. ans|=1<<(c-'a');
  9. if((ans^0x3ffffff)==0){
  10. return true;
  11. }
  12. }
  13. return false;
  14. }
  15. };

四、字符串

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int finalValueAfterOperations(vector<string>& operations) {
  6. int x=0;
  7. for(auto str:operations){
  8. if(str=="++X"||str=="X++"){
  9. x++;
  10. }else{
  11. x--;
  12. }
  13. }
  14. return x;
  15. }
  16. };

  1. //时间复杂度:O(n^2)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. string defangIPaddr(string address) {
  6. for(int i=0;i<address.length();i++){
  7. if(address[i]=='.'){
  8. address.insert(i+1,"]");
  9. address.insert(i,"[");
  10. i++;
  11. }
  12. }
  13. return address;
  14. }
  15. };

  1. //时间复杂度:O(n^2)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. int countConsistentStrings(string allowed, vector<string>& words) {
  6. int count=0;
  7. unordered_set<char>s;
  8. for(auto c:allowed){
  9. s.insert(c);
  10. }
  11. for(auto word:words){
  12. int flag=1;
  13. for(auto c:word){
  14. if(s.count(c)==0){
  15. flag=0;
  16. break;
  17. }
  18. }
  19. if(flag)
  20. count++;
  21. }
  22. return count;
  23. }
  24. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. void reverseString(vector<char>& s) {
  6. for(int i=0,j=s.size()-1;i<j;i++,j--){
  7. swap(s[i],s[j]);
  8. }
  9. }
  10. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. string reverseLeftWords(string s, int n) {
  6. string ans=s;
  7. for(int i=0;i<s.length();i++){
  8. ans[(i+s.length()-n)%s.length()]=s[i];
  9. }
  10. return ans;
  11. }
  12. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {
  6. string s1="",s2="";
  7. for(auto word:word1){
  8. s1+=word;
  9. }
  10. for(auto word:word2){
  11. s2+=word;
  12. }
  13. return s1==s2;
  14. }
  15. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. string complexNumberMultiply(string num1, string num2) {
  6. string s1_z="",s1_f="",s2_z="",s2_f="";
  7. int flag=1;
  8. for(int i=0;i<num1.length();i++){
  9. if(num1[i]!='+'&&flag){
  10. s1_z+=num1[i];
  11. }else{
  12. flag=0;
  13. }
  14. if(num1[i]=='+')
  15. continue;
  16. if(flag==0&&num1[i]!='i'){
  17. s1_f+=num1[i];
  18. }
  19. }
  20. flag=1;
  21. for(int i=0;i<num2.length();i++){
  22. if(num2[i]!='+'&&flag){
  23. s2_z+=num2[i];
  24. }else{
  25. flag=0;
  26. }
  27. if(num2[i]=='+')
  28. continue;
  29. if(flag==0&&num2[i]!='i'){
  30. s2_f+=num2[i];
  31. }
  32. }
  33. int n1_z=stoi(s1_z),n1_f=stoi(s1_f),n2_z=stoi(s2_z),n2_f=stoi(s2_f);
  34. string ans=to_string(n1_z*n2_z-n1_f*n2_f)+"+"+to_string(n1_f*n2_z+n1_z*n2_f)+"i";
  35. return ans;
  36. }
  37. };

五、递归

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(n)
  3. /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */
  4. class Solution {
  5. public:
  6. unordered_set<int>s;
  7. void search(TreeNode *root){
  8. if(root!=NULL){
  9. s.insert(root->val);
  10. search(root->left);
  11. search(root->right);
  12. }
  13. }
  14. int numColor(TreeNode* root) {
  15. search(root);
  16. return s.size();
  17. }
  18. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. int count=0;
  6. int numberOfSteps(int num) {
  7. if(num%2==0&&num!=0){
  8. count++;
  9. numberOfSteps(num/2);
  10. }
  11. if(num%2==1){
  12. count++;
  13. numberOfSteps(num-1);
  14. }
  15. return count;
  16. }
  17. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(H)
  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) {} * }; */
  4. class Solution {
  5. public:
  6. int maxdepth=-1,ans=0;
  7. void dfs(TreeNode *root,int depth){
  8. if(root==NULL){
  9. return;
  10. }
  11. if(depth>maxdepth){
  12. ans=root->val;
  13. maxdepth=depth;
  14. }else if(depth==maxdepth){
  15. ans+=root->val;
  16. }
  17. dfs(root->left,depth+1);
  18. dfs(root->right,depth+1);
  19. }
  20. int deepestLeavesSum(TreeNode* root) {
  21. dfs(root,1);
  22. return ans;
  23. }
  24. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(H)
  3. /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */
  4. class Solution {
  5. public:
  6. int maxDepth(TreeNode* root) {
  7. if(root==NULL){
  8. return 0;
  9. }
  10. int left_dep=maxDepth(root->left);
  11. int right_dep=maxDepth(root->right);
  12. return max(left_dep,right_dep)+1;
  13. }
  14. };

六、公式

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. int sum=0;
  6. int sumNums(int n) {
  7. n>0&&(sum=n+sumNums(n-1));
  8. return sum;
  9. }
  10. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. int multiply(int A, int B) {
  6. if(B==1){
  7. return A;
  8. }
  9. return A+multiply(A,B-1);
  10. }
  11. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int fib(int n) {
  6. if(n<2){
  7. return n;
  8. }
  9. int p=0,q=1,ans;
  10. for(int i=2;i<=n;i++){
  11. ans=p+q;
  12. p=q;
  13. q=ans;
  14. }
  15. return ans;
  16. }
  17. };

  1. //时间复杂度:O(sqrt(n))
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int kthFactor(int n, int k) {
  6. int ans;
  7. for(ans=1;ans<=sqrt(n);ans++){
  8. if(n%ans==0){
  9. k--;
  10. if(k==0){
  11. return ans;
  12. }
  13. }
  14. }
  15. ans--;
  16. if(ans*ans==n){
  17. ans--;
  18. }
  19. for(;ans>0;ans--){
  20. if(n%ans==0){
  21. k--;
  22. if(k==0){
  23. return n/ans;
  24. }
  25. }
  26. }
  27. return -1;
  28. }
  29. };

  1. //时间复杂度:O(n^2)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int countTriples(int n) {
  6. int count=0;
  7. for(int i=1;i<=n;i++){
  8. for(int j=1;j<=n;j++){
  9. int c=sqrt(i*i+j*j);
  10. if(c<=n&&c*c==i*i+j*j){
  11. count++;
  12. }
  13. }
  14. }
  15. return count;
  16. }
  17. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int gcd(int a,int b){
  6. int t;
  7. while(t!=0){
  8. t=a%b;
  9. a=b;
  10. b=t;
  11. }
  12. return a;
  13. }
  14. int findGCD(vector<int>& nums) {
  15. int maxn=-1,minn=5555;
  16. for(int i=0;i<nums.size();i++){
  17. maxn=max(maxn,nums[i]);
  18. minn=min(minn,nums[i]);
  19. }
  20. return gcd(maxn,minn);
  21. }
  22. };

  1. //时间复杂度:O(n^3)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. double area(vector<int>a,vector<int>b,vector<int>c){
  6. return 0.5*abs(a[0]*b[1]+b[0]*c[1]+c[0]*a[1]-a[1]*b[0]-b[1]*c[0]-c[1]*a[0]);
  7. }
  8. double largestTriangleArea(vector<vector<int>>& points) {
  9. double maxarea=0;
  10. int n=points.size();
  11. for(int i=0;i<n;i++)
  12. for(int j=i+1;j<n;j++)
  13. for(int k=j+1;k<n;k++)
  14. maxarea=max(maxarea,area(points[i],points[j],points[k]));
  15. return maxarea;
  16. }
  17. };

七、枚举

  1. //时间复杂度:O(n)。这里用一重循环对n个数字进行异或。
  2. //空间复杂度:O(1)。这里只是用了常量级别的辅助空间。
  3. class Solution {
  4. public:
  5. int xorOperation(int n, int start) {
  6. int ans=0;
  7. for(int i=0;i<n;i++){
  8. ans=ans^(start+2*i);
  9. }
  10. return ans;
  11. }
  12. };

  1. //时间复杂度:O(logn)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int subtractProductAndSum(int n) {
  6. int sum=0,mut=1;
  7. while(n!=0){
  8. sum+=(n%10);
  9. mut*=(n%10);
  10. n/=10;
  11. }
  12. return mut-sum;
  13. }
  14. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int findNumbers(vector<int>& nums) {
  6. int count=0;
  7. for(auto num:nums){
  8. if((int)(log10(num)+1)%2==0){
  9. count++;
  10. }
  11. }
  12. return count;
  13. }
  14. };

  1. //时间复杂度:O(logn)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int search(vector<int>& nums, int target) {
  6. int n=nums.size();
  7. int left=0,right=n-1;
  8. while(left<=right){
  9. int mid=(left+right)/2;
  10. if(nums[mid]==target){
  11. return mid;
  12. }else if(nums[0]<=nums[mid]){
  13. if(target>=nums[0]&&target<=nums[mid]){
  14. right=mid-1;
  15. }else{
  16. left=mid+1;
  17. }
  18. }else{
  19. if(target>=nums[mid]&&target<=nums[n-1]){
  20. left=mid+1;
  21. }else{
  22. right=mid-1;
  23. }
  24. }
  25. }
  26. return -1;
  27. }
  28. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. int countKDifference(vector<int>& nums, int k) {
  6. unordered_map<int,int>mp;
  7. int count=0;
  8. for(int i=0;i<nums.size();i++){
  9. int a=nums[i]+k,b=nums[i]-k;
  10. if(mp.find(a)!=mp.end()){
  11. count+=mp[a];
  12. }
  13. if(mp.find(b)!=mp.end()){
  14. count+=mp[b];
  15. }
  16. mp[nums[i]]++;
  17. }
  18. return count;
  19. }
  20. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. int numJewelsInStones(string jewels, string stones) {
  6. unordered_set<char>s;
  7. int count=0;
  8. for(auto jewel:jewels){
  9. s.insert(jewel);
  10. }
  11. for(auto stone:stones){
  12. if(s.count(stone)){
  13. count++;
  14. }
  15. }
  16. return count;
  17. }
  18. };

  1. //时间复杂度:O(n^2)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. int sumOddLengthSubarrays(vector<int>& arr) {
  6. int n=arr.size();
  7. int dp[n];
  8. int sum=arr[0];
  9. dp[0]=arr[0];
  10. for(int i=1;i<n;i++){
  11. sum+=arr[i];
  12. dp[i]=dp[i-1]+arr[i];
  13. }
  14. for(int i=0;i<n-1;i++){
  15. for(int j=i+1;j<n;j++){
  16. if((j-i+1)%2==1){
  17. sum+=dp[j]-dp[i]+arr[i];
  18. }
  19. }
  20. }
  21. return sum;
  22. }
  23. };

八、进制

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  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) {} * }; */
  4. class Solution {
  5. public:
  6. int getDecimalValue(ListNode* head) {
  7. int ans=0;
  8. while(head!=NULL){
  9. ans|=head->val;
  10. ans<<=1;
  11. head=head->next;
  12. }
  13. ans>>=1;
  14. return ans;
  15. }
  16. };

  1. //时间复杂度:O(logn)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int sumBase(int n, int k) {
  6. int sum=0;
  7. while(n!=0){
  8. sum+=(n%k);
  9. n/=k;
  10. }
  11. return sum;
  12. }
  13. };

  1. //时间复杂度:O(1)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int addDigits(int num) {
  6. if(num>0&&num%9==0){
  7. return 9;
  8. }
  9. return num%9;
  10. }
  11. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. string convertToBase7(int num) {
  6. string s="";
  7. int flag=0;
  8. if(num<0){
  9. flag=1;
  10. num=-num;
  11. }
  12. if(num==0){
  13. return "0";
  14. }
  15. while(num!=0){
  16. s+=(num%7)+'0';
  17. num/=7;
  18. }
  19. reverse(s.begin(),s.end());
  20. if(flag){
  21. s.insert(0,"-");
  22. }
  23. return s;
  24. }
  25. };

  1. //时间复杂度:O(k) k为十六进制的位数
  2. //空间复杂度:O(k)
  3. class Solution {
  4. public:
  5. string toHex(int num) {
  6. if(num==0){
  7. return "0";
  8. }
  9. string s="";
  10. for(int i=7;i>=0;i--){
  11. int tmp=(num>>(4*i))&15;
  12. if(tmp>0||s.length()>0){
  13. s+=tmp<10?(tmp+'0'):('a'+tmp-10);
  14. }
  15. }
  16. return s;
  17. }
  18. };

九、排序

  1. //时间复杂度:O(nlogn)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. vector<int> sortArray(vector<int>& nums) {
  6. sort(nums.begin(),nums.end());
  7. return nums;
  8. }
  9. };

  1. //时间复杂度:O(nlogn)
  2. //空间复杂度:O(n)
  3. class Solution {
  4. public:
  5. static bool cmp(pair<char,int>a,pair<char,int>b){
  6. return a.second>b.second;
  7. }
  8. string frequencySort(string s) {
  9. unordered_map<char,int>mp;
  10. vector<pair<char,int>>pairs;
  11. string ans="";
  12. for(auto c:s){
  13. mp[c]++;
  14. }
  15. for(auto it:mp){
  16. pairs.push_back(it);
  17. }
  18. sort(pairs.begin(),pairs.end(),cmp);
  19. for(auto [ch,num]:pairs){
  20. for(int i=0;i<num;i++){
  21. ans+=ch;
  22. }
  23. }
  24. return ans;
  25. }
  26. };

  1. //时间复杂度:O(nlogn)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int firstMissingPositive(vector<int>& nums) {
  6. int cnt=1,idx=0;
  7. sort(nums.begin(),nums.end());
  8. while(idx<nums.size()&&nums[idx]<=0){
  9. idx++;
  10. }
  11. for(int i=idx;i<nums.size();i++){
  12. if(nums[i]!=cnt){
  13. return cnt;
  14. }
  15. if(i+1<nums.size()&&nums[i]!=nums[i+1]){
  16. cnt++;
  17. }else if(i+1==nums.size()){
  18. cnt++;
  19. }
  20. }
  21. return cnt;
  22. }
  23. };

十、思维

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int arraySign(vector<int>& nums) {
  6. int flag=1;
  7. for(auto num:nums){
  8. if(num==0){
  9. return 0;
  10. }
  11. if(num<0){
  12. flag=-flag;
  13. }
  14. }
  15. return flag;
  16. }
  17. };

  1. //时间复杂度:O(1)
  2. //空间复杂度:O(1)
  3. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
  4. class Solution {
  5. public:
  6. void deleteNode(ListNode* node) {
  7. node->val=node->next->val;
  8. node->next=node->next->next;
  9. }
  10. };

  1. //时间复杂度:O(n)
  2. //空间复杂度:O(1)
  3. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
  4. class Solution {
  5. public:
  6. ListNode* deleteNode(ListNode* head, int val) {
  7. ListNode *h=head;
  8. if(head->val==val){
  9. return head->next;
  10. }
  11. while(h!=NULL){
  12. if(h->next->val==val){
  13. h->next=h->next->next;
  14. return head;
  15. }
  16. h=h->next;
  17. }
  18. return head;
  19. }
  20. };

相关文章