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

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

2023-07-31每日一题

一、题目编号

143. 重排链表

二、题目链接

点击跳转到题目位置

三、题目描述

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

	L0 → L1 → … → Ln - 1 → Ln

请将其重新排列后变为:

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

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

示例 1:
2023-07-31 LeetCode每日一题(重排链表),LeetCode每日一题,leetcode,算法,数据结构
示例 2:
2023-07-31 LeetCode每日一题(重排链表),LeetCode每日一题,leetcode,算法,数据结构
提示:

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

四、解题代码

/**
 * 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 {
    ListNode* middleNode(ListNode* head){
        ListNode* dummyHead = new ListNode(0);
        dummyHead->next = head;
        ListNode* fast = dummyHead;
        ListNode* slow = dummyHead;
        while(fast->next != nullptr){
            fast = fast->next;
            slow = slow->next;
            if(fast->next != nullptr){
                fast = fast->next;
            }
        }
    return slow;
    }

    void reverseListNode(ListNode* head1, ListNode* tail){
        ListNode* p = head1->next;
        tail = p;
        while(p != nullptr){
            ListNode* q = p;
            p = p->next;
            if(q == tail){
                tail->next = nullptr;
                continue;
            }
            head1->next = q;
            q->next = tail;
            tail = q;
        }
    }
public:
    void reorderList(ListNode* head) {
        ListNode* mid = middleNode(head);
        reverseListNode(mid, mid->next);
        ListNode* head1 = head;
        ListNode* head2 = mid->next;
      
        while(head1 != nullptr && head2 != nullptr){
            if(head1 == mid){
                head1->next = nullptr;
            }
            ListNode*p = head1;
            head1 = head1->next;
            if(head1 == mid){
                head1->next = nullptr;
            }
            p->next = head2;
            ListNode*q = head2;
            head2 = head2->next;
            q->next = head1;
        }
       
    }
};

五、解题思路

(1) 使用分治的思路来解决问题。文章来源地址https://www.toymoban.com/news/detail-624220.html

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

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

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

相关文章

  • 2023-07-07 LeetCode每日一题(过桥的时间)

    点击跳转到题目位置 共有 k 位工人计划将 n 个箱子从旧仓库移动到新仓库。给你两个整数 n 和 k,以及一个二维整数数组 time ,数组的大小为 k x 4 ,其中 time[i] = [leftToRighti, pickOldi, rightToLefti, putNewi] 。 一条河将两座仓库分隔,只能通过一座桥通行。旧仓库位于河的右岸,新仓

    2024年02月15日
    浏览(39)
  • 2023-07-15 LeetCode每日一题(四数之和)

    点击跳转到题目位置 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且 不重复 的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): 0 = a, b, c, d n a、b、c 和 d 互不相同 nums[a] + nums[b]

    2024年02月16日
    浏览(46)
  • 2023-07-08 LeetCode每日一题(三数之和)

    点击跳转到题目位置 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 **注意:**答案中不可以包含重复的三元组。 提示: 3 = nums.length = 3000 -10 5

    2024年02月13日
    浏览(50)
  • 2023-07-13 LeetCode每日一题(下降路径最小和)

    点击跳转到题目位置 给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的 下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左

    2024年02月15日
    浏览(80)
  • 2023-07-28 LeetCode每日一题(并行课程 III)

    点击跳转到题目位置 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n 。同时给你一个二维整数数组 relations ,其中 relations[j] = [prevCourse j , nextCourse j ] ,表示课程 prevCoursej 必须在课程 nextCourse j 之前 完成(先修课的关系)。同时给你一个下标从 0 开始的整数数组 time ,其

    2024年02月15日
    浏览(49)
  • 2023/07/01_leetcode每日一题_1. 两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 一开始审错题了,还以

    2024年02月12日
    浏览(52)
  • 2023/07/02_leetcode每日一题_2.两数相加

    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:l1 = [9,9,9,9,9,9

    2024年02月11日
    浏览(48)
  • 2023/07/11_leetcode每日一题_16. 最接近的三数之和

    给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 和三数之和那道题一样,排序加双指针

    2024年02月15日
    浏览(62)
  • 2023-08-12 LeetCode每日一题(合并 K 个升序链表)

    点击跳转到题目位置 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 示例 2: 示例 3:

    2024年02月13日
    浏览(40)
  • 2023-08-06 LeetCode每日一题(24. 两两交换链表中的节点)

    点击跳转到题目位置 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例1: 示例2: 示例3: 提示: 链表中节点的数目在范围 [0, 100] 内 0 = Node.val = 100 (1) 使用递归解决问题

    2024年02月14日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包