重排链表 几个关键点:

1. 双指针(快慢指针找中点)(用于反转后一部分)

2. 反转后一部分 (reverse函数)

3. 合并链表

合并的时候在笔试的时候想了一种比我之前想的简单的方法

从slow->next开始反转 而不是slow,如果从slow开始反转实际上会多插入最后一次 就会复杂一点

同时保存slow作为最后一个结点,断开slow后面的节点 进行合并

然后合并的时候注意 使用后面的链表p作为循环结束的条件,因为p为空说明所有的链表已经插入前面的链表了。

  1. #include<iostream>
  2. #include<string>
  3. #include<sstream>
  4. using namespace std;
  5. struct ListNode
  6. {
  7. int val;
  8. ListNode *next;
  9. ListNode(int v):val(v),next(NULL){}
  10. };
  11. ListNode* reverseList(ListNode *head)
  12. {
  13. ListNode *cur = head, *pre = NULL, *nxt =NULL;
  14. while(cur)
  15. {
  16. nxt = cur->next;
  17. cur->next = pre;
  18. pre = cur;
  19. cur = nxt;
  20. }
  21. return pre;
  22. }
  23. void helper(ListNode * head)
  24. {
  25. //快慢指针
  26. ListNode *slow=head,*fast=head;
  27. while(fast && fast->next)
  28. {
  29. fast = fast->next->next;
  30. slow = slow->next;
  31. }
  32. ListNode *newNode = slow->next;
  33. slow->next=NULL;
  34. ListNode *newHead = reverseList(newNode);
  35. ListNode *cur=head,*nxt=NULL,*p=newHead,*pnxt=NULL;
  36. while(p)
  37. {
  38. pnxt = p->next;
  39. nxt = cur->next;
  40. cur->next = p;
  41. p->next = nxt;
  42. cur = nxt;
  43. p = pnxt;
  44. }
  45. ListNode *res =head;
  46. cout<<"[";
  47. while(res->next)
  48. {
  49. cout<<res->val<<",";
  50. res=res->next;
  51. }
  52. cout<<res->val<<"]";
  53. }
  54. int main()
  55. {
  56. string str;
  57. getline(cin, str);
  58. int n = str.size();
  59. string strlist = str.substr(8,n-9);
  60. //建立链表
  61. if(strlist.empty())
  62. {
  63. cout<<"error"<<endl;
  64. return 0;
  65. }
  66. if(strlist.size()==1)
  67. {
  68. cout<<"["<<strlist[0]<<"]";
  69. return 0;
  70. }
  71. stringstream ss(strlist);
  72. string p;
  73. ListNode *dummy = new ListNode(-1);
  74. ListNode *pp = dummy;
  75. while(getline(ss,p,','))
  76. {
  77. int num = stoi(p);
  78. ListNode *numNode = new ListNode(num);
  79. //cout<<numNode->val<<endl;
  80. pp->next = numNode;
  81. pp = numNode;
  82. }
  83. ListNode *head=dummy->next;
  84. ListNode *res =head;
  85. //head = [1,2,3,4,5,6]
  86. helper(head);
  87. return 0;
  88. }

LeetCode 重排链表 OPPO笔试的更多相关文章

  1. Leetcode 143.重排链表

    重排链表 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示 ...

  2. Java实现 LeetCode 143 重排链表

    143. 重排链表 给定一个单链表 L:L0→L1→-→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节 ...

  3. LeetCode:链表专题

    链表专题 参考了力扣加加对与链表专题的讲解,刷了些 leetcode 题,在此做一些记录,不然没几天就没印象了 出处:力扣加加-链表专题 总结 leetcode 中对于链表的定义 // 定义方式1: ...

  4. 【Warrior刷题笔记】143.重排链表 【线性化 || 双指针+翻转链表+链表合并】详细注释

    题目一 力扣143.重排链表 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reorder-list/ 1.描述 给定一个单链表L的头节点he ...

  5. Leetcode解题-链表(2.2.0)基础类

    1 基类的作用 在开始练习LeetCode链表部分的习题之前,首先创建好一个Solution基类,其作用就是: Ø  规定好每个子Solution都要实现纯虚函数test做测试: Ø  提供了List ...

  6. LeetCode 单链表专题 (一)

    目录 LeetCode 单链表专题 <c++> \([2]\) Add Two Numbers \([92]\) Reverse Linked List II \([86]\) Parti ...

  7. L2-022 重排链表 (25 分)

    L2-022 重排链表 (25 分)   给定一个单链表 L​1​​→L​2​​→⋯→L​n−1​​→L​n​​,请编写程序将链表重新排列为 L​n​​→L​1​​→L​n−1​​→L​2​​→⋯.例 ...

  8. 【算法题 14 LeetCode 147 链表的插入排序】

    算法题 14 LeetCode 147 链表的插入排序: 解题代码: # Definition for singly-linked list. # class ListNode(object): # ...

  9. L2-022. 重排链表

    L2-022. 重排链表 时间限制 500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个单链表 L1→L2→...→Ln-1→Ln,请 ...

随机推荐

  1. 我是小白,做PPT像流水账,怎么做一份重点突出的PPT?

    1.PPT的封面不要只写标题,还要在显眼的位置写上你的核心观点.比如,你之前做的PPT封面标题是<A产品市场前景分析>,现在不妨加上一个副标题<红海市场中需要找到更多本产品卖点> ...

  2. phpQuery

    以下资料均来自官方文档,官方文档地址:https://code.google.com/archive/p/phpquery/wikis 基础 示例 phpQuery::newDocumentFileX ...

  3. FastAPI logger日志记录方案 loguru模块

    实现方式: 采用 loguru 模块.跟flask直接挂载到app上有区别,当然也可以尝试去这样做. 但是 好像没有这个必要.要的就是个快速.整那些子虚乌有的东西完全木有意义. 1.首先是去项目git ...

  4. AT2567-[ARC074C]RGB Sequence【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2567 题目大意 长度为\(n\)的包含三种颜色\(RGB\)的序列,\(m\)个限制\([l,r,k]\)表示 ...

  5. Hibernate 的 <= 出现问题

    问题模拟 select new map( e.name as name , e.salary as salary) from Emplpyee e where e.salary <= :sala ...

  6. 14-Java锁的概述

    14-锁的概述 乐观锁与悲观锁 ​ 乐观锁与悲观锁是数据库中引入的名词,但是在并发包里也引入了类似的思想,在这里我们还是有必要需要了解一下. ​ 悲观锁指数据被外界修改持保守态度,认为数据会很容易被其 ...

  7. sarama的消费者组分析、使用

    以前老的sarama版本不支持消费者组的消费方式,所以大多数人都用sarama-cluster. 后来sarama支持了消费者组的消费方式,sarama-cluster也停止维护了,但网上关于sara ...

  8. Docker--harbor私有仓库部署与管理

    目录 一.Harbor简介 二.Harbor 部署 三.维护管理Harbor  一.Harbor简介 1.什么是Harbor  ? Harbor 是 VMware 公司开源的企业级 Docker Re ...

  9. pip 安装软件报 Requirement already satisfied

    pip 安装的时候报错了,以为是豆瓣源有问题,换了还是一样,于是我们只需要加入一个参数 --target=路径    给它一个指定的位置就可以解决这个问题 安装位置不变,只是增加了一个参数在后面

  10. Redis 高阶数据类型重温

    今天这个专题接着上一篇 Redis 的基本数据类型 继续讲解剩下的高阶数据类型:BitMap.HyperLogLog 和 GEO hash.这些数据结构的底层也都是基于我们前面说的 5 种 基本类型, ...