C++程序 将链表中的偶数节点和奇数节点分离

C++程序 将链表中的偶数节点和奇数节点分离

什么是链表

在计算机科学中,链表是一种线性数据结构,其中元素的线性顺序不是由它们在内存中的物理位置给出的,而是每个元素存储了下一个元素的地址。链表数据结构允许插入和移除表上任意位置的节点,这使得链表在某些应用上比数组更具优势。

如何将链表中的偶数节点和奇数节点分离

下面是将链表中的偶数节点和奇数节点分离的C++代码示例:

#include<iostream>
using namespace std;

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
    ListNode* oddEvenList(ListNode* head) {
        if(head == NULL || head -> next == NULL || head -> next -> next==NULL) {
            return head;
        }
        ListNode* odd = head;
        ListNode* even = head -> next;
        ListNode* evenHead = even;
        while(even != NULL && even -> next != NULL) {
            odd -> next = even -> next;
            odd = odd -> next;
            even -> next = odd -> next;
            even = even -> next;
        }
        odd -> next = evenHead;
        return head;
    }
};

int main() {
    ListNode* node1 = new ListNode(1);
    ListNode* node2 = new ListNode(2);
    ListNode* node3 = new ListNode(3);
    ListNode* node4 = new ListNode(4);
    ListNode* node5 = new ListNode(5);
    ListNode* node6 = new ListNode(6);
    node1 -> next = node2;
    node2 -> next = node3;
    node3 -> next = node4;
    node4 -> next = node5;
    node5 -> next = node6;
    Solution solution;
    ListNode* head = solution.oddEvenList(node1);
    while(head != NULL) {
        cout<<head -> val<<" ";
        head = head -> next;
    }
    return 0;
}

代码解释

我们可以通过创建两个指针,一个指向奇数节点,另一个指向偶数节点,然后我们每次移动这两个指针并修改链接指向,直到链表遍历完成。

  • 首先需要对链表进行非空判断,如果链表为空、只有一个节点或只有两个节点,则直接返回head节点。

  • 赋值两个指针odd和even,odd指向链表的第一个节点,even指向链表的第二个节点。同样这个节点可以通过一个判断来保证链表的正确性。

  • 遍历所有偶数节点,将两个链表分离。这里需要注意我们需要循环遍历每个偶数节点,所以对even节点的下一项是否为空进行判断。

  • 将odd链表的next指向even链表的next,odd向后移动

  • 将even链表的next指向odd链表的next,even向后移动,作用是将偶数链表两两连接。

  • 返回head节点。

结论

这里展示了如何将链表中的偶数节点和奇数节点分离,我们可以通过创建两个指针,一个指向奇数节点,另一个指向偶数节点,并使用一个循环来遍历所有的节点。在编写这段代码时,应该对链表进行非空判断,并小心处理两个链表的链接指向。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例