LeetCode LCR 026. 重排链表

这篇具有很好参考价值的文章主要介绍了LeetCode LCR 026. 重排链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LCR 026. 重排链表
中等
128
相关企业
给定一个单链表 L 的头节点 head ,单链表 L 表示为:

L0 → L1 → … → Ln-1 → Ln
请将其重新排列后变为:

L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:
LeetCode LCR 026. 重排链表,LeetCode,链表,leetcode,链表,linux

输入: head = [1,2,3,4]
输出: [1,4,2,3]
示例 2:

LeetCode LCR 026. 重排链表,LeetCode,链表,leetcode,链表,linux

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

提示:

链表的长度范围为 [1, 5 * 104]
1 <= node.val <= 1000

题解

相当于把链表的后面半段翻转后,和前面半段交替连接。

于是需要利用快慢指针找到中间的节点,然后再写个反转。

AC代码文章来源地址https://www.toymoban.com/news/detail-707666.html

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    void reorderList(ListNode* head) 
    {
        if(head->next==NULL)return;
        ListNode* H = new ListNode(0);
        H->next = head;
        ListNode * slow;
        ListNode * fast;
        ListNode * cur;
        slow = head;
        fast = head;
        while(slow!=NULL&&fast!=NULL)
        {
            cur = slow;
            slow = slow->next;
            fast = fast->next;
            if(fast!=NULL)
            {
                fast = fast->next;
            }
        }
        cur->next = NULL;
        //cout<<cur->val<<endl;
        //翻转slow开始的节点
        ListNode * nex = slow->next;
        ListNode * last = slow;
        last->next=NULL;
        while(nex!=NULL)
        {
            slow = nex;
            nex = nex->next;
            slow->next = last;
            last = slow;
        }
        ListNode *p1 = H->next;
        ListNode *p2 = slow;
        ListNode *p = H;
        while(p1!=NULL&&p2!=NULL)
        {
            //cout<<p1->val<<" "<<p2->val<<endl;
            p->next = p1;
            p = p->next;
            p1 = p1->next;

            p->next = p2;
            p = p->next;
            p2 = p2->next;
            
        }
        while(p1!=NULL)
        {
            p->next = p1;
            p1 = p1->next;
        }
        head = H->next;
    }
};

到了这里,关于LeetCode LCR 026. 重排链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023-07-31 LeetCode每日一题(重排链表)

    点击跳转到题目位置 给定一个单链表 L 的头节点 head ,单链表 L 表示为: 请将其重新排列后变为: 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 示例 2: 提示: 链表的长度范围为 [1, 5 * 10 4 ] 1 = node.val = 1000 (1) 使用 分治 的思路来解决问题。

    2024年02月14日
    浏览(45)
  • 多种方法解决leetcode经典题目-LCR 155. 将二叉搜索树转化为排序的双向链表, 同时弄透引用变更带来的bug

    这段代码实际上是一个常见的算法题目的解法,目标是将一个二叉搜索树转换为一个排序的双向链表。整个过程是通过中序遍历来实现的,遍历过程中修改节点的左右指针来构建双向链表。代码中使用了一个额外的节点 dummy 来帮助构建双向链表,并使用 pre 节点来保存前一个

    2024年02月06日
    浏览(43)
  • LeetCode - LCR 008.长度最小的子数组

    LeetCode - 209. 长度最小的子数组 由于此问题分析的对象是「⼀段连续的区间」,因此可以考虑 「滑动窗口」 的思想来解决这道题。 让滑动窗口满足:从 i 位置开始,窗口内所有元素的和小于target (那么当窗口内元素之和 第⼀次大于等于目标值的时候,就是i 位置开始,满足

    2024年04月27日
    浏览(30)
  • leetcode 面试题 判定是否互为字符重排

    🌟 leetcode链接:判定是否互为字符重排 思路: 两个字符串的每个字母和数量都相等。那么 s2 一定可以排成 s1 字符串。 代码:

    2024年02月16日
    浏览(32)
  • 每日一题:LeetCode-LCR 007. 三数之和

    前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈    🔎🔎如果说代码有灵魂,那么它的灵魂一定是👉👉 算法 👈👈,因此,想要写出💚优美的程序💚,核心算法是必不可少的,少年,你渴望力量吗😆😆,想掌握程序的灵魂吗❓❗️那么就必须踏上这样一条漫长

    2024年02月01日
    浏览(49)
  • 每日一题:LeetCode-LCR 143.子结构判断

    前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈    🔎🔎如果说代码有灵魂,那么它的灵魂一定是👉👉 算法 👈👈,因此,想要写出💚优美的程序💚,核心算法是必不可少的,少年,你渴望力量吗😆😆,想掌握程序的灵魂吗❓❗️那么就必须踏上这样一条漫长

    2024年02月05日
    浏览(44)
  • LeetCode 面试题 01.02. 判定是否互为字符重排

    ​   给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串,点击此处跳转。 示例 1: 输入: s1 = “abc”, s2 = “bca” 输出: true 示例 2: 输入: s1 = “abc”, s2 = “bad” 输出: false 说明: 0 = len(s1) = 100 0

    2024年02月12日
    浏览(38)
  • 【算法|动态规划No.10】leetcode LCR 089. 打家劫舍 & LCR 090. 打家劫舍 II

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年01月20日
    浏览(43)
  • leetcode:LCR 159. 库存管理 III(python3解法)

    仓库管理员以数组  stock  形式记录商品库存表,其中  stock[i]  表示对应商品库存余量。请返回库存余量最少的  cnt  个商品余量,返回  顺序不限 。 示例 1: 示例 2: 提示: 0 = cnt = stock.length = 10000 0 = stock[i] = 10000

    2024年02月02日
    浏览(41)
  • 【LeetCode力扣】LCR170 使用归并排序的思想解决逆序对问题(详细图解)

    目录 1、题目介绍 2、解题思路 2.1、暴力破解法 2.2、归并排序思想 2.2.1、画图详细讲解 2.2.2、归并排序解决逆序对的代码实现 首先阅读题目可以得出要点,即当 前数 大于 后数 时则当作一个【逆序对】,而题目是要求在一个数组中计算一共存在多少个这样的逆序对并输出结

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包