leetcode_328 Odd Even Linked List

来源:互联网 发布:java按字符读取文件 编辑:程序博客网 时间:2024/06/05 00:48
  • 题目分析:

    给定一个单向链表,要求将所有的奇数位置的节点放到前面,如1->2->3->4->5->NULL,则进行变换后,得到的链表为1->3->5->2->4->NULL。

  • 解题思路:

    1)一遍遍历链表,将链表分为奇数链表和偶数链表

    2)将1)中得到的奇数链表与偶数链表进行挂接,从而得到最终的奇偶链表。

  • 实现程序

    • C版本

      // 奇偶链表操作struct ListNode *oddEvenList(struct ListNode *head){    // 奇数链表     struct ListNode *odd = (struct ListNode *) malloc (sizeof(struct ListNode));    // 偶数链表    struct ListNode *even = (struct ListNode *) malloc (sizeof(struct ListNode));    struct ListNode *odd1 = odd;    struct ListNode *even1 = even;    if (head == NULL || head->next == NULL || head->next->next == NULL)        return head;    struct ListNode *o = head;    struct ListNode *e = head->next;    // 循环分割出奇数链表和偶数链表     while (true)    {        odd1->next = o;        odd1 = odd1->next;        even1->next = e;        even1 = even1->next;        if (e != NULL)            o = o->next->next;        else             break;        if (o != NULL)            e = e->next->next;        else            break;    }    // 处理奇数链表的尾部     if (o != NULL)    {        odd1->next = o;        odd1 = odd1->next;    }     // 处理偶数链表的尾部     if (e != NULL)    {        even1->next = e;        even1 = even1->next;    }    // 处理链表尾部,并将两个链表进行挂接    if (even1 != NULL)        even1->next = NULL;    odd1->next = even->next;    return odd->next; } 
0 0
原创粉丝点击