zoukankan      html  css  js  c++  java
  • 【leetcode】328 Odd Even Linked List

    题目说明

    https://leetcode-cn.com/problems/odd-even-linked-list/description/
    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。
    请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

    解法1

    /*
     * 时间复杂度:O(n)
     * 用index来判断是是否为奇偶,记录最后一个奇数结点oddptr
     * 遍历链表将奇数结点插入到oddptr之后
     */
    ListNode* oddEvenList(ListNode* head) {
        ListNode *pre = head;
        ListNode *oddptr = head;
        ListNode *cur = NULL;
        ListNode *cur_next = NULL;
        int index = 1;
    
        while(pre && pre->next){
            index ++;
            cur = pre->next;
    
            if (index % 2){
                cur_next = cur->next;
                cur->next = oddptr->next;
                oddptr->next = cur;
                pre->next = cur_next;
                oddptr = oddptr->next;
            } else{
                pre = pre->next;
            }
        }
        return head;
    }
    

    解法2

    /*
     * 时间复杂度:O(n)
     * 用两个指针分别指向第一个结点first与第二个结点second,即第一个奇数结点与第一个偶数结点
     * first指向second的下一个结点,即第二个奇数结点,这样就将两个奇数结点串起来了,再将first向后移动一位
     * 同理second也指向第二个偶数结点,再将second后移
     * 如此循环,直到链表结束,就得到了奇数链表与偶数链表
     * 最后将最后一个奇数结点指向第一个偶数结点,将奇偶串起来,即完成链表重组。
     */
    ListNode* oddEvenList(ListNode* head) {
        if (head == NULL)
            return NULL;
        ListNode *first = head;
        ListNode *second = head->next;
        ListNode *temp = second;
    
        while(second && second->next){
            first->next = second->next;
            first = first->next;
            second->next = first->next;
            second = second->next;
        }
        first->next = temp;
        return head;
    }
  • 相关阅读:
    字符编码
    python基础5
    python基础4
    python基础3
    python基础2
    一、计算机基础
    Django中间件
    Django Form表单组件
    django简介,安装,文件介绍,三板斧(render,HttpResponse,redirect)HTTP协议,用socket实现简单版web框架,用wsgiref,jinja2,pymysql实现Django运行流程
    css,浮动,清浮动,溢出overflow,定位,圆形,透明度,z-index
  • 原文地址:https://www.cnblogs.com/JesseTsou/p/9570036.html
Copyright © 2011-2022 走看看