前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode笔记:328. Odd Even Linked List

LeetCode笔记:328. Odd Even Linked List

作者头像
Cloudox
发布2021-11-23 15:29:34
2100
发布2021-11-23 15:29:34
举报
文章被收录于专栏:月亮与二进制月亮与二进制

问题

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: Given 1->2->3->4->5->NULL, return 1->3->5->2->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 ...

大意:

给出一个简单链表,集合所有奇数位置的节点,后面跟着所有偶数位置的节点。请注意这里我们说的是节点的位置而不是节点值。 你应该尝试在固定空间做。程序应该在O(1)的空间复杂度和O(nodes)的时间复杂度下运行。 例子: 给出 1->2->3->4->5->NULL, 返回 1->3->5->2->4->NULL。 注意: 偶数和奇数组中节点的相对位置要保持不变。 第一个节点被认为是奇数,第二个是偶数,如此往复。

思路:

题目的要求根据例子就可以明白,奇数和偶数位置的节点分成两段来排列,关键是要在O(1)的空间复杂度下做,否则直接用一个新链表就可以简单完成。

O(1)的空间下也好做,我们用两个头结点,一个为奇数的头结点,一个为偶数的头结点,然后遍历链表,奇数位置的节点就记录在奇数头结点后面,偶数位置的节点就记录在偶数头结点后面,两者是交替记录的,因为我们用的还是原来的节点,只是next指针指向的节点变了,所以并没有增加空间。遍历完后我们得到了奇偶两条链表,将偶链表的头结点接到奇链表的最尾端就可以了。

要注意一些节点为Null的处理。

代码(Java):

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode oddEvenList(ListNode head) {
        if (head == null || head.next == null) return head;
        
        ListNode even = head.next;
        ListNode evenNext = even;
        ListNode oddNext = head;
        while (evenNext != null) {
            oddNext.next = evenNext.next;
            
            if (oddNext.next != null) {
                oddNext = oddNext.next;
                evenNext.next = oddNext.next;
                evenNext = evenNext.next;
            } else {
                break;
            }
        }
        oddNext.next = even;
        return head;
    }
}

合集:https://github.com/Cloudox/LeetCode-Record

查看作者首页

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/11/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 大意:
  • 思路:
  • 代码(Java):
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档