zoukankan      html  css  js  c++  java
  • 328. Odd Even Linked List

    Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes.

    You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity.

    Example 1:

    Input: 1->2->3->4->5->NULL
    Output: 1->3->5->2->4->NULL
    

    Example 2:

    Input: 2->1->3->5->6->4->7->NULL
    Output: 2->3->6->7->1->5->4->NULL
    

    Note:

    • The relative order inside both the even and odd groups should remain as it was in the input.
    • The first node is considered odd, the second node even and so on ...

    two pointer

    time: O(n), space: O(1)

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode oddEvenList(ListNode head) {
            if(head ==  null || head.next == null) {
                return head;
            }
            ListNode dummyOdd = new ListNode(0);
            ListNode dummyEven = new ListNode(0);
            ListNode curOdd = dummyOdd;
            ListNode curEven = dummyEven;
            
            ListNode cur = head;
            while(cur != null && cur.next != null) {
                curOdd.next = cur;
                curEven.next = cur.next;
                
                curOdd = curOdd.next;
                curEven = curEven.next;
                cur = cur.next.next;
            }
            if(cur != null) {
                curOdd.next = cur;
                curOdd.next.next = dummyEven.next;
            } else {
                curOdd.next = dummyEven.next;
            }
            
            curEven.next = null;
            return dummyOdd.next;
        }
    }

    optimized:

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode oddEvenList(ListNode head) {
            if(head ==  null || head.next == null) {
                return head;
            }
            
            ListNode curOdd = head;
            ListNode evenHead = head.next;
            ListNode curEven = evenHead;
            
            while(curEven != null && curEven.next != null) {
                curOdd.next = curEven.next;
                curEven.next = curEven.next.next;
                
                curOdd = curOdd.next;
                curEven = curEven.next;
            }
            curOdd.next = evenHead;
            return head;
        }
    }
  • 相关阅读:
    第五讲:深入hibernate的三种状态
    mysql安装图解 mysql图文安装教程(详细说明)
    Codeforces 13C
    ubuntu常用软件
    git安装方法
    SSH免密码登录的方法
    bash 小技巧
    Haskell 学习
    客户端connect返回错误显示No route to host
    ubuntu下C操作Mysql数据库第一步
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10184502.html
Copyright © 2011-2022 走看看