📌  相关文章
📜  用于分离链表中偶数和奇数节点的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:40:53.328000             🧑  作者: Mango

用于分离链表中偶数和奇数节点的 C++ 程序介绍

链表是一种常见的数据结构,在实际开发中经常用到。有时需要将链表中的奇数节点和偶数节点分别提取出来,此时可以使用本程序进行操作。

程序实现思路

本程序的实现思路比较简单:定义两个指针 odd 和 even,分别指向奇数节点和偶数节点的链表头部。遍历链表,当节点的序号为奇数时,将其插入到 odd 链表末尾;当序号为偶数时,将其插入到 even 链表末尾。最终将 odd 链表尾部与 even 链表头部相连即可。

代码实现

以下是使用 C++ 实现分离链表中偶数和奇数节点的程序代码。

#include <iostream>

struct ListNode {
    int val;
    ListNode* next;
};

ListNode* oddEvenList(ListNode *head) {
    if (head == nullptr) {
        return nullptr;
    }

    ListNode* odd = head;
    ListNode* even = head->next;
    ListNode* evenHead = even;

    while (even != nullptr && even->next != nullptr) {
        odd->next = even->next;
        odd = odd->next;
        even->next = odd->next;
        even = even->next;
    }

    odd->next = evenHead;
    return head;
}

int main() {
    ListNode a = {1, nullptr};
    ListNode b = {2, nullptr};
    ListNode c = {3, nullptr};
    ListNode d = {4, nullptr};
    ListNode e = {5, nullptr};

    a.next = &b;
    b.next = &c;
    c.next = &d;
    d.next = &e;

    ListNode* head = oddEvenList(&a);
    while (head != nullptr) {
        std::cout << head->val << "->";
        head = head->next;
    }

    std::cout << "null" << std::endl;

    return 0;
}

上述代码中,ListNode 表示链表节点的结构体,包含一个 val 值和一个指向下一个节点的指针 next。oddEvenList 函数用于分离奇数节点和偶数节点。该函数的参数是链表头部的指针,返回值是分离后的链表头部指针。在主函数中,构造了一个由 1,2,3,4,5 五个节点组成的链表,将该链表传入 oddEvenList 函数进行分离,并输出分离后的结果。

代码解析

oddEvenList 函数的实现思路已在程序实现思路中介绍。需要注意的是,在进行节点插入操作时,需要将链表中的某个节点的 next 指针指向另一个节点,务必注意链表节点指针的顺序。

总结

本程序使用 C++ 实现了链表中奇数节点和偶数节点的分离,并演示了使用。对于开发中可能遇到的链表问题,可以参考本程序进行解决。