归并忘了 直接抄!
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; // 返回新链表的头节点(哨兵节点的下一个节点&