12.10 - 合并两个有序链表 && 对字节对齐的理解

目录

1.合并两个有序链表

a.核心思想

b.思路

c.步骤

2.对字节对齐的理解


1.合并两个有序链表

21. 合并两个有序链表 - 力扣(LeetCode)https://leetcode.cn/problems/merge-two-sorted-lists/

cpp 复制代码
/**
 * 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:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        // 1. 处理特殊情况
        if(!list1)
            return list2;
        if(!list2)
            return list1;
        
        // 2. 给两个链表分别创建两个新的指针
        ListNode* ptr1 = list1;
        ListNode* ptr2 = list2;

        // 3. 创建一个新链表
        ListNode* new_list = new ListNode(-1);
        ListNode* tail = new_list;

        while(ptr1 && ptr2)
        {
            if(ptr1->val < ptr2->val)
            {
                tail->next = ptr1;
                ptr1 = ptr1->next;
            }
            else
            {
                tail->next = ptr2;
                ptr2 = ptr2->next;
            }
            tail = tail->next;
        }

        // 4. 总会有一条链表先走完
        if(ptr1)
            tail->next = ptr1;
        if(ptr2)
            tail->next = ptr2;

        return new_list->next;
    }
};

a.核心思想

合并两个有序链表,生成新有序链表。

b.思路

双指针遍历比较,按序拼接节点。

c.步骤

① 处理边界:任一链表为空时直接返回另一链表。

② 创建虚拟头节点简化操作。

③ 双指针遍历两链表,比较节点值,将较小节点接入新链表并移动指针。

④ 将剩余非空链表直接接入新链表尾部。

⑤ 返回新链表头节点(虚拟头的下一节点)。

2.对字节对齐的理解

字节对齐是数据在内存中按特定边界(如2、4、8字节)存储的规则,核心在于

|--------|--------------------------------------|
| 目的 | 提升CPU访问效率,避免跨边界读取导致的性能损耗。 |
| 原则 | 数据类型按其自然对齐值(如int按4字节)存放,不足时填充空白字节。 |
| 影响 | 影响内存占用和访问速度,需在空间效率与访问效率间权衡。 |
| 应用 | 结构体设计、硬件寄存器访问等场景需显式控制对齐方式。 |

希望这些内容对大家有所帮助!

感谢大家的三连支持!

相关推荐
穿条秋裤到处跑19 小时前
每日一道leetcode(2026.04.29):二维网格图中探测环
算法·leetcode·职场和发展
汉克老师20 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
智者知已应修善业1 天前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
云泽8081 天前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
水蓝烟雨1 天前
1931. 用三种不同颜色为网格涂色
算法·leetcode
AI进化营-智能译站1 天前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
Morwit1 天前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
qeen871 天前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
图码1 天前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler011 天前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法