• leetcode 328 奇偶链表


    更新代码:

    开头检测是否需要调整(是否具有第三个节点)

    使用三个ListNode* 变量记录奇偶链表的头尾headA,tailA为奇链表,headB为偶数链表,由于只需要最后令tailA->next=headB因此不需要tailB。

    使用两个ListNode* 变量来进行遍历,cur记录当前链表节点指针,nxt记录下一个链表节点指针。

    使用一个int 变量记录是否为奇数节点,如果是则更新tailA。

    time O(n),space O(1)

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    /**
    定义四个变量:headA,headB记录第一个和第二个节点,tailA记录奇数节点的尾部,cur为当前遍历节点,next为下一个节点
    
    **/
    class Solution {
    public:
        ListNode* oddEvenList(ListNode* head) {
            if(head==NULL||head->next==NULL||head->next->next==NULL) return head;
            ListNode* headA=head,*headB=head->next;
            ListNode* tailA,*cur=head,*nxt=head->next;
            int flag=0;
            while(nxt){
                cur->next=nxt->next;
                cur=nxt,nxt=nxt->next;
                if(flag) tailA=cur;
                flag=(flag+1)%2;
            }
            cur->next=NULL;// if(flag) cur->next=NULL;应该也可以
            tailA->next=headB;
            return headA;
        }
    };

     效果不错

     


    C++代码:定义三个指针变量,cur,nex,head2,思路就是将链表分开为奇偶两部分,cur,和nex分别指向当前节点和下一个节点,当nex的下一个节点为NULL 终止循环,head指向第二个节点(如果有的话);

    时间复杂度O(nodes);

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* oddEvenList(ListNode* head) {
    12         if(head==NULL||head->next==NULL) return head;
    13         ListNode* cur;
    14         ListNode* nex;
    15         ListNode* head2;
    16         cur=head;nex=head->next;head2=nex;
    17         int flag=1;
    18         while(nex->next!=NULL){
    19             cur->next=nex->next;
    20             cur=nex;nex=nex->next;
    21             flag=-flag;
    22         }
    23         cur->next=NULL;
    24         
    25         if(flag==1){
    26             cur->next=head2;
    27         }else{
    28             nex->next=head2;
    29         }
    30         return head;
    31     }
    32 };

     效果一般般:

  • 相关阅读:
    Intellij Idea免费激活方法
    算法中的 log 到底是什么?
    java 历史版本下载
    IntelliJ远程调试教程
    【转载】 tensorflow batch_normalization的正确使用姿势
    【转载】 Tensorflow如何直接使用预训练模型(vgg16为例)
    某宝购入牙膏厂U后其售后事宜的思虑
    【转载】 tensorflow: 怎样找到对应的bazel 版本和安装
    【转载】 优必选悉尼 AI 研究院何诗怡:基于课程学习的强化多标签图像分类算法 | 分享总结
    【转载】 科研工作者的哪些「新手常见错误」
  • 原文地址:https://www.cnblogs.com/joelwang/p/10446879.html
Copyright © 2020-2023  润新知