📅  最后修改于: 2023-12-03 15:11:15.575000             🧑  作者: Mango
本篇文章主要介绍一种用于交替拆分给定单链表的C++程序。该程序的主要实现方式是将原链表拆分成两个子链表,然后将这两个子链表按照一定规则重新合并成一个新的链表。该程序具有代码简单、易于理解等优点。
先将原链表从头到尾遍历,将其中奇数节点和偶数节点按照顺序存储到两个新链表中。
再将这两个新链表顺序合并成一个新链表。
最后返回新链表的头结点即可。
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;
}
首先判断给定链表长度是否为0或1,如果是,直接返回原链表头节点。
将链表分为奇数节点链表和偶数节点链表,分别用odd和even指针指向它们的头节点。
在遍历原链表时,将奇数节点插入到奇数节点链表中,将偶数节点插入到偶数节点链表中。
最后将偶数链表接到奇数链表的尾部即可,返回头节点即为变换后的链表。
本篇文章介绍了一种简单的C++程序,用于交替拆分给定单链表。该程序通过分割链表并重新连接方式实现了对链表的变换。可以说该程序作用广泛,既可以用于链表的操作,也可以将该思路应用到其他数据结构中。