LeetCode hot 力扣热题100 排序链表

归并忘了 直接抄!

class Solution { // 定义一个 Solution 类,包含链表排序的相关方法。
    // 使用快慢指针找到链表的中间节点,并断开链表为两部分
    ListNode* middleNode(ListNode* head) { 
        ListNode* slow = head; // 慢指针 slow 初始化为链表头节点
        ListNode* fast = head; // 快指针 fast 初始化为链表头节点
        while (fast->next && fast->next->next) { // 当 fast 指针还能向前走两步时循环
            slow = slow->next; // slow 每次向前移动一步
            fast = fast->next->next; // fast 每次向前移动两步
        }
        ListNode* mid = slow->next; // 找到中间节点的下一节点,将其作为右半部分的头节点
        slow->next = nullptr; // 将左半部分的最后一个节点的 next 指针置为 nullptr,断开链表
        return mid; // 返回右半部分的头节点 mid
    }

    // 合并两个有序链表,返回合并后的链表头节点
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        ListNode dummy; // 定义一个哨兵节点,简化合并逻辑
        ListNode* cur = &dummy; // cur 用于构建新链表,初始指向哨兵节点
        while (list1 && list2) { // 当两个链表都不为空时进行合并
            if (list1->val < list2->val) { // 如果 list1 的当前值小于 list2 的当前值
                cur->next = list1; // 将 list1 的节点加入新链表
                list1 = list1->next; // list1 指针向后移动
            } else { // 否则,将 list2 的节点加入新链表
                cur->next = list2;
                list2 = list2->next; // list2 指针向后移动
            }
            cur = cur->next; // cur 指针向后移动
        }
        cur->next = list1 ? list1 : list2; // 将剩余的非空链表直接接到新链表末尾
        return dummy.next; // 返回新链表的头节点(哨兵节点的下一个节点&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值