当前位置: 首页 > news >正文

两道有关链表的练习

目录

一、分割链表

二、奇偶链表



一、分割链表

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你不需要 保留 每个分区中各节点的初始相对位置。

示例 1

 输入:head = [1,4,3,2,5,2], x = 3

输出:[1,2,2,4,3,5]

示例 2

输入:head = [2,1], x = 2

输出:[1,2]

提示

  • 链表中节点的数目在范围 [0, 200]

  • -100 <= Node.val <= 100

  • -200 <= x <= 200

代码实现

struct ListNode* partition(struct ListNode* head, int x)
{struct ListNode* lessGuard = (struct ListNode*)malloc(sizeof(struct ListNode));lessGuard->next = NULL;struct ListNode* lessTail = lessGuard;
​struct ListNode* greaterGuard = (struct ListNode*)malloc(sizeof(struct ListNode));greaterGuard->next = NULL;struct ListNode* greaterTail = greaterGuard;// 将小于 x 的结点尾插到第一个链表中,// 将大于或等于 x 的结点尾插到第二个链表中struct ListNode* cur = head;while (cur != NULL){if (cur->val < x){lessTail->next = cur;lessTail = cur;}else{greaterTail->next = cur;greaterTail = cur;}cur = cur->next;}// 链接这两个链表lessTail->next = greaterGuard->next;  // (1)greaterTail->next = NULL;  // (2)// 返回head = lessGuard->next;free(lessGuard);free(greaterGuard);return head;
}

图解示例一

 


二、奇偶链表

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。

第一个节点的索引被认为是 奇数第二个节点的索引为 偶数 ,以此类推。

请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。

你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。

示例 1

 输入: head = [1,2,3,4,5]

输出: [1,3,5,2,4]

示例 2

 输入: head = [2,1,3,5,6,4,7]

输出: [2,3,6,7,1,5,4]

提示

  • n == 链表中的节点数

  • 0 <= n <= 104

  • -106 <= Node.val <= 10^6

代码实现

struct ListNode* oddEvenList(struct ListNode* head)
{if (head == NULL){return head;}struct ListNode* odd = head;struct ListNode* even = head->next;struct ListNode* evenHead = even;while (even != NULL && even->next != NULL){odd->next = even->next; odd = odd->next;even->next = odd->next;even = even->next;}odd->next = evenHead;return head;
}

图解示例一

http://www.lryc.cn/news/38834.html

相关文章:

  • Python uiautomator2安卓自动化测试
  • Leetcode. 160相交链表
  • MDPs —— 马尔可夫决策定义与算法
  • 【C++】图
  • 尾递归优化
  • P1120 小木棍(搜索+剪枝)
  • 【专项训练】动态规划-3
  • 【Linux】信号+再谈进程地址空间
  • C++回顾(二十一)—— list容器
  • 爱国者一体机电脑蓝屏怎么U盘重装系统教学?
  • Vue学习笔记(9)
  • 中值滤波+Matlab仿真+频域响应分析
  • 自然语言处理中数据增强(Data Augmentation)技术最全盘点
  • PINN解偏微分方程实例1
  • 【python 基础篇 十二】python的函数-------函数生成器
  • elasticsearch全解 (待续)
  • springboot2集成knife4j
  • Qt 性能优化:CPU占有率高的现象和解决办法
  • MySQL专题(学会就毕业)
  • Java高级技术:单元测试、反射、注解
  • C语言初识
  • Cadence Allegro 导出Etch Length by Layer Report报告详解
  • 无监督对比学习(CL)最新必读经典论文整理分享
  • 最长回文子串【Java实现】
  • LeetCode 438. Find All Anagrams in a String
  • MyBatis-1:基础概念+环境配置
  • R语言基础(五):流程控制语句
  • 【Java开发】设计模式 02:工厂模式
  • 合并两个链表(自定义位置合并与有序合并)LeetCode--OJ题详解
  • Java编程问题总结