zoukankan      html  css  js  c++  java
  • 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. 切断前后半个链表的链接处 然后合并两个链表

  • 相关阅读:
    用HTML5的Audio标签做一个歌词同步的效果
    关于AJAX的跨域问题
    java 计算器后台实现
    springboot 学习(一) 配置mybatis ,全局日期处理
    Java不可见字符处理
    eclipse 常用插件
    Spring data jpa 返回map 结果集
    Oracle数据中表值插不进去问题(转)
    利用Eclipse的JPA自动生成注解实体
    对象-Map 相互转换
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4214312.html
Copyright © 2011-2022 走看看