📅  最后修改于: 2023-12-03 15:27:12.370000             🧑  作者: Mango
本文介绍一个用于重新排列链表的 C 程序,可以将链表中的奇数位置和偶数位置的节点都放在一起。
实现该功能的主要思路是,将链表中的奇数节点和偶数节点分开存放,然后再将它们按照顺序重新排列。
以下是代码实现的关键部分:
// 创建新的链表头结点
struct ListNode *odd = (struct ListNode *) malloc(sizeof(struct ListNode));
struct ListNode *even = (struct ListNode *) malloc(sizeof(struct ListNode));
struct ListNode *odd_head = odd;
struct ListNode *even_head = even;
int i = 1; // 用于计数,判断奇偶性
while (head) {
if (i % 2 == 1) {
odd->next = head;
odd = odd->next;
} else {
even->next = head;
even = even->next;
}
head = head->next;
i++;
}
even->next = NULL; // 将偶数链表尾部置空
odd->next = even_head->next; // 将偶数链表接到奇数链表尾部
return odd_head->next;
当链表长度为0或1时,不需要进行重新排列操作。
本文介绍了一个用于重新排列链表的 C 程序,可以将链表中的奇数位置和偶数位置的节点都放在一起,实现了我们的需求。