• leetcode 【 Reorder List 】python 实现


    题目:

    Given a singly linked list LL0→L1→…→Ln-1→Ln,
    reorder it to: L0→LnL1→Ln-1→L2→Ln-2→…

    You must do this in-place without altering the nodes' values.

    For example,
    Given {1,2,3,4}, reorder it to {1,4,2,3}.

    代码: oj 测试通过 248 ms

     1 # Definition for singly-linked list.
     2 # class ListNode:
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.next = None
     6 
     7 class Solution:
     8     # @param head, a ListNode
     9     # @return nothing
    10     def reorderList(self, head):
    11         if head is None or head.next is None or head.next.next is None:
    12             return head
    13         
    14         dummyhead = ListNode(0)
    15         dummyhead.next = head
    16         
    17         # get the length of the linked list
    18         p = head
    19         list_length = 0
    20         while p is not None:
    21             list_length += 1
    22             p = p.next
    23         
    24         #reverse the second half linked list
    25         fast = dummyhead
    26         for i in range((list_length+1)/2):
    27             fast = fast.next
    28         pre = fast
    29         curr = pre.next
    30         for i in range( (list_length)/2 - 1 ):
    31             tmp = curr.next
    32             curr.next = tmp.next
    33             tmp.next = pre.next
    34             pre.next = tmp
    35         
    36         #merge
    37         h2 = pre.next
    38         fast.next = None # cut the connection between 1st half linked list and 2nd half linked list
    39         while head is not None and h2 is not None:
    40             tmp = head.next
    41             head.next = h2
    42             tmp2 = h2.next
    43             head.next.next = tmp
    44             h2 = tmp2
    45             head = tmp
    46         
    47         return dummyhead.next

    思路

    这道题的路子分三块:

    1. 遍历单链表 求链表长度

    2. 锁定后半个链表,反转后半个链表的每个元素

    3. 切断前后半个链表的链接处 然后合并两个链表

  • 相关阅读:
    文件上传之断点续传方案
    WEB项目(B/S系统)打包安装(总结篇)
    FLEX4.0开发流媒体视频播放器(总结篇)
    mysql 从库出现system lock延迟
    mysql与oracle 不同
    操作系统运维查询命令
    centos ifconfig 命令找不到
    bit 与 byte的区别
    mysql 登录socket与TCP
    xhost +
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4214312.html
Copyright © 2020-2023  润新知