将单链表l1拆成二个链表,其中以l1为头的链表保持原来向后的链接,一个链表的头为l2,其链接方向与l1相反,l1包含原链表的奇数序号的结点,l2包含原链表的偶数序列的结点,通过main函数完成函数调用
时间: 2023-04-24 09:06:53 浏览: 78
好的,以下是用中文回复:
可以通过遍历原链表l1,将奇数序号的结点插入到新链表l2的头部,偶数序号的结点保持在原链表l1中。具体实现可以参考以下代码:
struct ListNode* oddEvenList(struct ListNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
struct ListNode* odd = head;
struct ListNode* even = head->next;
struct 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() {
// 创建原链表l1
struct ListNode* l1 = createList();
// 将l1拆成两个链表
struct ListNode* l2 = oddEvenList(l1);
// 输出结果
printf("l1: ");
printList(l1);
printf("l2: ");
printList(l2);
// 释放内存
freeList(l1);
freeList(l2);
return ;
}
阅读全文