重排链表 几个关键点:

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

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

3. 合并链表

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

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

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

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

#include<iostream>
#include<string>
#include<sstream> using namespace std; struct ListNode
{
int val;
ListNode *next;
ListNode(int v):val(v),next(NULL){} }; ListNode* reverseList(ListNode *head)
{
ListNode *cur = head, *pre = NULL, *nxt =NULL; while(cur)
{
nxt = cur->next;
cur->next = pre;
pre = cur;
cur = nxt;
}
return pre;
} void helper(ListNode * head)
{
//快慢指针
ListNode *slow=head,*fast=head; while(fast && fast->next)
{
fast = fast->next->next;
slow = slow->next;
}
ListNode *newNode = slow->next;
slow->next=NULL;
ListNode *newHead = reverseList(newNode);
ListNode *cur=head,*nxt=NULL,*p=newHead,*pnxt=NULL;
while(p)
{
pnxt = p->next;
nxt = cur->next;
cur->next = p;
p->next = nxt;
cur = nxt;
p = pnxt;
}
ListNode *res =head;
cout<<"[";
while(res->next)
{
cout<<res->val<<",";
res=res->next;
}
cout<<res->val<<"]";
}
int main()
{
string str;
getline(cin, str); int n = str.size();
string strlist = str.substr(8,n-9);
//建立链表
if(strlist.empty())
{
cout<<"error"<<endl;
return 0;
}
if(strlist.size()==1)
{
cout<<"["<<strlist[0]<<"]";
return 0;
}
stringstream ss(strlist);
string p;
ListNode *dummy = new ListNode(-1);
ListNode *pp = dummy;
while(getline(ss,p,','))
{
int num = stoi(p);
ListNode *numNode = new ListNode(num);
//cout<<numNode->val<<endl;
pp->next = numNode;
pp = numNode;
}
ListNode *head=dummy->next; ListNode *res =head;
//head = [1,2,3,4,5,6]
helper(head);
return 0;
}

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. openTSDB-采集器批量部署-tcollector

        前提: 所需安装采集器服务器与部署服务器之间都已经配置无密码登录 1.安装服务器安装expect包 安装服务器与需要安装Tcollector服务器之间未配置无密登录需要此步. yum inst ...

  2. 集群环境下的Session管理

    1. 集群环境下的管理HTTPSSession所遇到的问题 一台服务器对应这个一个session对象,无法在另外一个服务器互通 解决方法: 1. Session 的 Replication(复制)将当 ...

  3. layui 利用js原型方法来加载函数

    //举例如下: !function (win) { var FUNC = function () { this.v = "3.3" }; //这里添加函数 FUNC.prototy ...

  4. 鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务 | 百篇博客分析OpenHarmony源码 | v41.03

    百篇博客系列篇.本篇为: v41.xx 鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁 ...

  5. 鸿蒙内核源码分析(系统调用篇) | 开发者永远的口头禅 | 百篇博客分析OpenHarmony源码 | v37.03

    百篇博客系列篇.本篇为: v37.xx 鸿蒙内核源码分析(系统调用篇) | 开发者永远的口头禅 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁 ...

  6. Visaul Studio Code中提示 vue:无法加载vue.ps1,未对vue.ps1进行数字签名

    Visaul Studio Code错误提示 错误如图: 解决办法 首先以管理员身份打开windows PowShell终端. 输入下面命令,如提示选择Y即可. get-help set-execut ...

  7. IOS开发之UIScrollView约束布局

    概要 在iOS开发学习中,UIScrollView是绕不过去的一个重要控件. 但是相对于Android的ScrollView,iOS的这个滚动控件的用法简直是复杂一万倍... 最主要是目前能找到的大部 ...

  8. 当一个 Pod 被调度时,Kubernetes 内部发生了什么?

    在 Kubernetes 中,调度是指将 Pod 放置到合适的 Node 上,然后对应 Node 上的 Kubelet 才能够运行这些 Pod . kube-scheduler 是集群控制平面的主要组 ...

  9. firewalld dbus接口使用指南

    firewalld,一个基于动态区的iptables/nftables守护程序,自2009年左右开始开发,最新版本 - 防火墙0.6.3 - 发布于2018年10月11日.主要的开发人员是托马斯·沃纳 ...

  10. 41 位 Contributor 参与,1574 个 PR,不容错过的版本更新!

    6 月 25 日,在商业公司 SphereEx 正式成立一月之余的今天,我们很高兴的宣布 Apache ShardingSphere 迎来了 5.0.0-beta 版本的正式发布.经过半年多的优化和打 ...