zoukankan      html  css  js  c++  java
  • LeetCode328 奇偶链表

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

    请尝试使用原地算法完成。你的算法的空间复杂度应为 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

    说明:

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

    //章节 - 链表    
    //三、经典问题
    //3.奇偶链表
    /*
    算法思想:
        用两个奇偶指针分别指向奇偶节点的起始位置,另外需要一个单独的指针even_head来保存偶节点的起点位置,然后把奇节点的指向偶节点的下一个(一定是奇节点),此奇节点后移一步,再把偶节点指向下一个奇节点的下一个(一定是偶节点),此偶节点后移一步,以此类推直至末尾,此时把分开的偶节点的链表连在奇节点的链表后即可。
    */
    //算法实现:
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* oddEvenList(ListNode* head) {
            if (head==NULL || head->next==NULL) 
                return head;
            ListNode *odd = head, *even = head->next, *even_head = even;
            while (even!=NULL && even->next!=NULL) {
                odd = odd->next = even->next;
                even = even->next = odd->next;
            }
            odd->next = even_head;
            return head;
        }
    };
  • 相关阅读:
    bzoj3675 [Apio2014]序列分割
    bzoj3437 小P的牧场
    bzoj3156 防御准备
    bzoj1911 [Apio2010]特别行动队
    Codeforces 937.D Sleepy Game
    Codeforces 937.C Save Energy!
    Codeforces 937.B Vile Grasshoppers
    bzoj1597 [Usaco2008 Mar]土地购买
    DDA画线算法
    实验九
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10061498.html
Copyright © 2011-2022 走看看