> 文章列表 > 【LeetCode】剑指 Offer(8)

【LeetCode】剑指 Offer(8)

【LeetCode】剑指 Offer(8)

目录

题目:剑指 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;}
};

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。