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日
    浏览(46)
  • 多种方法解决leetcode经典题目-LCR 155. 将二叉搜索树转化为排序的双向链表, 同时弄透引用变更带来的bug

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

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

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

    2024年04月27日
    浏览(31)
  • 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日
    浏览(42)
  • 每日一题:LeetCode-LCR 016. 无重复字符的最长子串

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

    2024年02月03日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包