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考虑?请鹿过高手拍砖并指点.

  • 相关阅读:
    云题库错题分析
    数据库相关子查询
    阻止事件冒泡
    21分钟 MySQL 入门教程(转载!!!)
    java接口
    java访问修饰符
    小游戏,快速击键
    个人对Java中多态的一些简单理解
    简述抽象和封装,对你学习Java有一些作用
    Bank,我只是来完成作业的
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4187692.html
Copyright © 2011-2022 走看看