zoukankan      html  css  js  c++  java
  • leetcode 【Rotate List 】python 实现

    题目

    Given a list, rotate the list to the right by k places, where k is non-negative.

    For example:
    Given 1->2->3->4->5->NULL and k = 2,
    return 4->5->1->2->3->NULL.

    代码:oj在线测试通过 Runtime: 200 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     # @param k, an integer
    10     # @return a ListNode
    11     def rotateRight(self, head, k):
    12         if k == 0 or head is None or head.next is None:
    13             return head
    14         
    15         dummyhead = ListNode(0)
    16         dummyhead.next = head
    17         
    18         pFirst = dummyhead
    19         pSecond = dummyhead
    20         
    21         # get length of the linked list
    22         length = 0
    23         p = dummyhead
    24         while p.next is not None:
    25             length += 1
    26             p = p.next
    27         k = k % length
    28         if k == 0:
    29             return dummyhead.next
    30 
    31         for i in range(0,k):
    32             pFirst = pFirst.next
    33         
    34         while pFirst.next is not None:
    35             pFirst = pFirst.next
    36             pSecond = pSecond.next
    37         
    38         result = pSecond.next
    39         pSecond.next = None
    40         pFirst.next = dummyhead.next
    41         
    42         return result

    思路

    这个题目感觉没有说清楚 如果k大于表长度应该怎么办 并不是特别严谨

    首先对k值进行预处理(尤其需要考虑k大于表长度的情况)

    1. 处理一个special case: 当k等于表长的时候 不用处理 直接返回Linked List (这个case之前一直没有考虑,导致一直没有通过,shit)

    2. 后面的就是常规的思路。双指针,其中一个指针先移动k步;然后两个指针一起移动,第一个指针移动到最后一个元素;再然后就是把尾巴接到头上,再从第二个指针.next的位置向后断开就OK了

    疑惑:小白还有一个疑惑 就是如何才能不把k=0的情况当杜作为一个case考虑?请鹿过高手拍砖并指点.

  • 相关阅读:
    方法和参数
    【转】priority_queue优先队列
    【转】主席树学习
    【转】树链剖分
    【转】线段树完全版~by NotOnlySuccess
    【转】树状数组
    【转】最大流EK算法
    【转】POJ题目分类推荐 (很好很有层次感)
    【转】原根
    【转】Polya定理
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4187692.html
Copyright © 2011-2022 走看看