
C++
GeoAI
改变世界,从我做起!
展开
-
奇偶链表(中等)
奇偶链表(中等)给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(nullptr) {}};class Solution原创 2020-10-26 20:14:18 · 271 阅读 · 0 评论 -
对链表进行插入排序(中等)
对链表进行插入排序(中等)插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(nullptr) {}};class Solution{public原创 2020-10-26 20:13:18 · 517 阅读 · 0 评论 -
两两交换链表中的节点(中等)
两两交换链表中的节点(中等)给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(nullptr) {}};class Solution{public: ListNode* swapPairs(ListNode* head) {原创 2020-10-26 20:12:22 · 298 阅读 · 0 评论 -
分隔链表(中等)
分隔链表(中等)给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(nullptr) {}};class Solution{public: ListNode* partition(ListNode *head, int原创 2020-10-26 20:11:24 · 211 阅读 · 0 评论 -
旋转链表(中等)
旋转链表(中等)给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。#include<stdio.h>struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(NULL) {}};class Solution{public: ListNode* rotateRight(ListNode *head, int k) {原创 2020-10-26 20:10:22 · 153 阅读 · 0 评论 -
反转链表II(中等)
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(nullptr) {}};class Solution{public: ListNode* reverseBetween(ListNode *head, int m, int n) { if(原创 2020-10-26 20:09:08 · 204 阅读 · 0 评论 -
排序链表(中等)
排序链表(中等)在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。#include<stdio.h>struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(nullptr) {}};class Solution{public: ListNode* sortList(ListNode *head) { List原创 2020-10-26 20:07:48 · 122 阅读 · 0 评论 -
移除链表元素(简单)
删除链表中等于给定值 val 的所有节点。struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(nullptr) {}};class Solution{public: ListNode* removeElements(ListNode *head, int val) { ListNode *sentinel = new ListNode(0);原创 2020-10-26 20:06:27 · 294 阅读 · 0 评论 -
删除链表中的节点(简单)
删除链表中的节点(简单)请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。提示:链表至少包含两个节点。 链表中所有节点的值都是唯一的。 给定的节点为非末尾节点并且一定是链表中的一个有效节点。 不要从你的函数中返回任何结果。#include<stdio.h>struct ListNode{ int val; ListNode *next; ListNode(int x): val(x), next(原创 2020-10-26 20:05:00 · 1082 阅读 · 0 评论 -
从尾到头打印链表(简单)
从尾到头打印链表(简单)输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。#include<vector>#include<stack>using namespace std;struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};class Solution {public: vector<i原创 2020-10-26 20:02:47 · 198 阅读 · 0 评论