【力扣】143. 重排链表

143. 重排链表

题目描述

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

L0 → L1 → … → Ln - 1 → Ln

请将其重新排列后变为:

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

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

示例 1:

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

示例 2:

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

提示:

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

解题方法

链表数组重排序

  • C 语言
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
void reorderList(struct ListNode* head) {
    int len = 0;
    struct ListNode* str = head;
    // 定义链表数组
    struct ListNode* tab_list[50000];

    if (NULL == head) {
        return;
    }
    // 将链表存在数组中
    while (NULL != str) {
        tab_list[len++] = str;
        str = str->next;
    }
    // 定义双指针
    int left = 0, right = len - 1;
    // 重新排序链表
    while (left < right) {

        tab_list[left]->next = tab_list[right];
        left++;
        if (left == right) {
            break;
        }
        tab_list[right]->next = tab_list[left];
        right--;
    }
    tab_list[left]->next = NULL;
}
复杂度分析
时间复杂度为 O(N),其中 N 是链表中的节点数。
空间复杂度为 O(N),其中 N 是链表中的节点数。

相关推荐

  1. 143. 重排

    2024-05-10 21:46:04       11 阅读
  2. 100】141.环形

    2024-05-10 21:46:04       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 21:46:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 21:46:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 21:46:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 21:46:04       20 阅读

热门阅读

  1. c#笔记(调用exe,xmal,gif)

    2024-05-10 21:46:04       12 阅读
  2. 规则引擎简单介绍以及与设计模式之间的关系

    2024-05-10 21:46:04       12 阅读
  3. 【TypeScript高级类型简介以及使用方法】

    2024-05-10 21:46:04       11 阅读
  4. 洛谷P10397题解

    2024-05-10 21:46:04       13 阅读
  5. CF988D题解

    2024-05-10 21:46:04       11 阅读
  6. React 第二十八章 前端框架

    2024-05-10 21:46:04       9 阅读
  7. 按键精灵写的有点失败了

    2024-05-10 21:46:04       9 阅读