[力扣c语言实现]328.奇偶链表

    xiaoxiao2023-11-16  154

    328.奇偶链表

    1. 题目描述2.代码如下

    原题目连接

    1. 题目描述

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

    请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

    示例 1:

    输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NULL 示例 2:

    输入: 2->1->3->5->6->4->7->NULL 输出: 2->3->6->7->1->5->4->NULL 说明:

    应当保持奇数节点和偶数节点的相对顺序。 链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。

    2.代码如下

    //2018-12-15 time 14:21 struct ListNode* oddEvenList(struct ListNode* head) { if(!head||!head->next||!head->next->next) {//至少保证有三个结点 return head; } typedef struct ListNode list; list* p1 = head; list* odd_head = p1; list* p2 = head->next; list* even_list = malloc(sizeof(list)); even_list->next = NULL; p1->next = p2->next; p2->next = even_list->next; even_list->next = p2; p1 = p1->next; if(p1->next) { p2->next = p1->next; p2 = p2->next; } else { p1->next = even_list->next; return odd_head; } while(p1->next&&p2->next) { p1->next = p2->next; p1 = p1->next; p2->next = p1->next; p2 = p2->next; } p1->next = even_list->next; return odd_head; } ```c
    最新回复(0)