目录
题目:剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
题目:剑指 Offer 24. 反转链表 - 力扣(Leetcode)
题目的接口:
解题思路:
代码:
过啦!!!
写在最后:
题目:剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 - 力扣(Leetcode)
题目的接口:
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
}
};
解题思路:
方法1:
我的思路比较暴力,也是最容易想到的思路:
建一个vector,
第一次遍历数组,把奇数插入进去,
第二次遍历数组,把偶数插入进去,
然后返回即可。
这种方法最简单。
方法2:
其实我还想到一种方法,原地完成:
只需要遍历一次数组,遇到偶数与数组尾部交换,
然后让尾指针++即可。
不过我用的是第一种方法。
代码:
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
vector<int> v;
//第一次遍历,尾插奇数
for(auto e : nums)
{
if(e % 2 == 1)
{
v.push_back(e);
}
}
//第二次遍历,尾插偶数
for(auto e : nums)
{
if(e % 2 == 0)
{
v.push_back(e);
}
}
return v;
}
};
过啦!!!
题目:剑指 Offer 24. 反转链表 - 力扣(Leetcode)
题目的接口:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
}
};
解题思路:
这道题看完后,我有两种思路,
第一种是将链表的数据逆置;
第二种是将链表的指针逆置;
我个人感觉将链表的指针逆置更容易,效率也更高一些,
具体思路就是将原头结点指向空,
双指针遍历链表逆置指针即可。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
//判断链表是否为空
if(head == nullptr)
{
return head;
}
//设置双指针
ListNode* cur = head->next;
ListNode* prev = head;
//将头结点指向空
head->next = nullptr;
//遍历链表,逆置指针指向
while(cur)
{
ListNode*tmp = prev;
prev = cur;
cur = cur->next;
prev->next = tmp;
}
return prev;
}
};
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。