📌  相关文章
📜  用于交替拆分给定单链表的 C++ 程序 - 集 1(1)

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

用于交替拆分给定单链表的 C++ 程序 - 集 1

本篇文章主要介绍一种用于交替拆分给定单链表的C++程序。该程序的主要实现方式是将原链表拆分成两个子链表,然后将这两个子链表按照一定规则重新合并成一个新的链表。该程序具有代码简单、易于理解等优点。

程序思路
  1. 先将原链表从头到尾遍历,将其中奇数节点和偶数节点按照顺序存储到两个新链表中。

  2. 再将这两个新链表顺序合并成一个新链表。

  3. 最后返回新链表的头结点即可。

代码实现
struct ListNode { 
    int val; 
    ListNode *next; 
    ListNode(int x) : val(x), next(NULL) {} 
};

ListNode* oddEvenList(ListNode* head) {
    if (head == NULL || head->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;
}
程序分析
  1. 首先判断给定链表长度是否为0或1,如果是,直接返回原链表头节点。

  2. 将链表分为奇数节点链表和偶数节点链表,分别用odd和even指针指向它们的头节点。

  3. 在遍历原链表时,将奇数节点插入到奇数节点链表中,将偶数节点插入到偶数节点链表中。

  4. 最后将偶数链表接到奇数链表的尾部即可,返回头节点即为变换后的链表。

总结

本篇文章介绍了一种简单的C++程序,用于交替拆分给定单链表。该程序通过分割链表并重新连接方式实现了对链表的变换。可以说该程序作用广泛,既可以用于链表的操作,也可以将该思路应用到其他数据结构中。