• 【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
    
  • 相关阅读:
    SQL注入过滤
    ASP.NET长文章分页
    简单的权限管理类
    不错的面试题
    【转载】【重要】Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结
    回到xwindows
    suse11 linux不自动启动xwindows
    flash的几种工具
    mencoder和ffmpeg参数详解
    ffmpeg和Mencoder使用实例小全
  • 原文地址:https://www.cnblogs.com/ldy-miss/p/11946919.html
Copyright © 2020-2023  润新知