zoukankan      html  css  js  c++  java
  • 【Leetcode链表】奇偶链表(328)

    题目

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

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

    说明:

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

    解答

    两种方法:

    • 奇数用一个头结点,偶数用一个头结点。然后将二者相连。
    • 傻逼操作

    通过代码如下:

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
        # 奇数用一个头结点,偶数用一个头结点。然后将二者相连。
        # O(n),O(1)
        def oddEvenList(self, head: ListNode) -> ListNode:
            if not head:
                return head
            p = head
            t = q = p.next
            while p and p.next and q and q.next:
                p.next, q.next = p.next.next, q.next.next
                p, q = p.next, q.next
            p.next = t
            return head
    
        # 傻逼操作
        # O(n),O(1)
        # def oddEvenList(self, head: ListNode) -> ListNode:
        #     if not head or not head.next or not head.next.next:
        #         return head
            
        #     tail = head
        #     ans = 1
        #     while tail.next:
        #         ans += 1
        #         tail = tail.next
        #     wei = tail
    
        #     c = head
        #     p = 0
        #     while c != wei:
        #         if p == 1:
        #             break
        #         curr = c
        #         if ans%2==0 and curr.next == wei:
        #             p = 1
        #         n = c.next
        #         c.next = n.next
        #         tail.next = n
        #         tail = n
        #         c = n.next
        #     tail.next = None
        #     return head
    
  • 相关阅读:
    十天学会php之第一天
    学习PHP的一些经验
    PHP中的数据类型(1)
    PHP中的常量
    赵凡导师并发知识第一次分享观后感
    面向对象之 __setitem__()、__getitem__()、__delitem__() 用法
    spider数据抓取(第二章)
    识别网站所用技术
    scrapy安装要求
    基于bs4的防止xss攻击,过滤script标签
  • 原文地址:https://www.cnblogs.com/ldy-miss/p/11946919.html
Copyright © 2011-2022 走看看