📅  最后修改于: 2023-12-03 15:40:53.328000             🧑  作者: Mango
链表是一种常见的数据结构,在实际开发中经常用到。有时需要将链表中的奇数节点和偶数节点分别提取出来,此时可以使用本程序进行操作。
本程序的实现思路比较简单:定义两个指针 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++ 实现了链表中奇数节点和偶数节点的分离,并演示了使用。对于开发中可能遇到的链表问题,可以参考本程序进行解决。