C语言笔试题之重排链表

重排链表

实例要求

  • 1、给定一个单链表 L 的头节点 head ,单链表 L 表示为:
c 复制代码
L0 → L1 → ... → Ln - 1 → Ln
  • 2、请将其重新排列后变为:
c 复制代码
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → ...
  • 3、不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换;
  • 示例:

实例分析

  • 1、找到链表的中间节点,可以使用快慢指针法
  • 2、将链表分为两部分,前半部分和后半部分。
  • 3、将后半部分反转。
  • 4、将两个部分交替合并

示例代码

c 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
void reorderList(struct ListNode* head) {
    if (head == NULL || head->next == NULL || head->next->next == NULL) return;
    
    // 快慢指针找中间节点
    struct ListNode *slow = head;
    struct ListNode *fast = head;
    while (fast->next != NULL && fast->next->next != NULL) {
        slow = slow->next;
        fast = fast->next->next;
    }
    
    // 将链表分为两部分
    struct ListNode *secondHalf = slow->next;
    slow->next = NULL;
    
    // 反转后半部分链表
    struct ListNode *prev = NULL;
    struct ListNode *curr = secondHalf;
    struct ListNode *nextNode;
    while (curr != NULL) {
        nextNode = curr->next;
        curr->next = prev;
        prev = curr;
        curr = nextNode;
    }
    secondHalf = prev;
    
    // 合并两个部分
    struct ListNode *firstHalf = head;
    while (secondHalf != NULL) {
        struct ListNode *nextFirst = firstHalf->next;
        struct ListNode *nextSecond = secondHalf->next;
        
        firstHalf->next = secondHalf;
        secondHalf->next = nextFirst;
        
        firstHalf = nextFirst;
        secondHalf = nextSecond;
    }
}

运行结果


相关推荐
库玛西2 小时前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
AC赳赳老秦2 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
x²+(y-√³x²)²=13 小时前
Linux打包文件到Windows,文件/文件类型丢失
linux·运维·windows
程序员与背包客_CoderZ3 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
嵌入式阿蔡5 小时前
HAL库 vs LL库 vs 寄存器:到底用哪个?
c语言·stm32·单片机·嵌入式硬件·嵌入式实时数据库
Yyyyyy~5 小时前
【C】C语言常见概念
c语言
Rudon滨海渔村5 小时前
windows10如何删除多余的输入法 - 仅保留English+拼音
windows·输入法
嵌入式阿蔡6 小时前
CAN总线入门:从协议帧到STM32实战
c语言·stm32·单片机·嵌入式硬件·嵌入式实时数据库
YCOSA20256 小时前
雨晨 Windows 11 IoT 企业版 LTSC 26H1 特制 28000.2796
windows·物联网
Jay-r7 小时前
DeepSeek Harness 极简上手:装好、玩熟、让它自己长新能力
人工智能·windows·ai·github·ai编程·deepseek·harness