🌈 个人主页:白子寰
🔥 分类专栏:python从入门到精通,魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分82+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)
目录
反转链表
题目要求
示例
解法:双指针法
思路
图解
代码
轮转数组
题目要求
示例
解法
方法一:数组方法
【时间复杂度O(n)】
方法二:memcpy法
【时间和空间复杂度O(n)】
代码
方法一
方法二
反转链表
206.反转链表https://leetcode.cn/problems/reverse-linked-list/description/
题目要求
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表。
示例
解法:双指针法
思路
创建结点:temp,prev = NULL,cur = head
while使用cur遍历循环链表
temp指向头cur的下一个节点(保存cur的下一个结点)
cur的下一个节点指向prev(翻转操作)
更新prev,cur指针
如此循环,直到cur指向空指针(如下面图解)
最后返回prev
图解
代码
typedef struct ListNode LTNode;
struct ListNode* reverseList(struct ListNode* head) {LTNode* temp;LTNode* prev = NULL;LTNode* cur = head;while(cur){//保存cur的下一个结点temp = cur->next;//翻转cur->next = prev;//更新结点prev = cur;cur = temp;}return prev;
}
轮转数组
189.轮转数组https://leetcode.cn/problems/rotate-array/
题目要求
给定一个整数数组
nums
,将数组中的元素向右轮转k
个位置,其中k
是非负数。
示例
解法
方法一:数组方法
【时间复杂度O(n)】
方法二:memcpy法
【时间和空间复杂度O(n)】
代码
方法一
void Reverse(int* a,int left,int right)
{while(left < right){int tmp = a[left];a[left] = a[right];a[right] = tmp;++left;--right;}
}
void rotate(int* nums, int numsSize, int k) {k %= numsSize;//前n-k个逆置Reverse(nums,0,numsSize-k-1);//后k个逆置Reverse(nums,numsSize-k,numsSize-1);//全部逆置Reverse(nums,0,numsSize-1);
}
方法二
void rotate(int* nums, int numsSize, int k) {k %= numsSize;int n = numsSize;int tmp[numsSize];//前n-k个逆置memcpy(tmp,nums+n-k,sizeof(int)*(k));//后k个逆置memcpy(tmp+k,nums,sizeof(int)*(n-k));//全部逆置memcpy(nums,tmp,sizeof(int)*(n));
}
***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。
等等等等一下,分享最近喜欢的一句话:“当我在追光,我与光同航”。
我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!!
好了划走吧。