https://leetcode.cn/problems/odd-even-linked-list/description/?envType=study-plan-v2&envId=leetcode-75
class Solution {
public:// 定义一个函数,用于将链表中的奇数和偶数节点分开ListNode* oddEvenList(ListNode* head) {// 创建两个哑节点,分别作为奇数链表和偶数链表的头节点ListNode* head1 = new ListNode(0);ListNode* head2 = new ListNode(0);// 初始化两个指针,分别指向奇数链表和偶数链表的当前节点ListNode* cur1 = head1;ListNode* cur2 = head2;int index = 1; // 初始化索引,用于判断节点是奇数还是偶数// 遍历原链表for (ListNode* cur = head; cur != nullptr; cur = cur->next) {// 如果当前索引为奇数,说明当前节点是奇数节点,将其添加到奇数链表if (index++ % 2 != 0) {cur1->next = cur;cur1 = cur1->next;} else {// 如果当前索引为偶数,说明当前节点是偶数节点,将其添加到偶数链表cur2->next = cur;cur2 = cur2->next;}}// 将偶数链表的头节点指向奇数链表的下一个节点,实现奇数和偶数的合并cur1->next = head2->next; // 将偶数链表的最后一个节点的next指针设置为nullptr,结束偶数链表cur2->next = nullptr; // 返回奇数链表的头节点ListNode* result = head1->next;// 释放哑节点的内存delete head1; delete head2; // 返回重新组织的链表的头节点return result;}
};