zoukankan      html  css  js  c++  java
  • leetcode------Rotate List

    标题: Rotate List
    通过率: 21.8%
    难度: 中等

    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.

    前边做过一个数组的翻转。数组的翻转用一个示例解释:

    k=K%len(num)

    num=[1,2,3,4,5],k=2

    第一步,翻转

    num=[5,4,3,2,1]

    第二步找到k点,将k点之前的翻转一次。k点之后的翻转一次

    num=[45,123]

    本题是链表用翻转的就会变得麻烦,但是可以看出来翻转的链表仍然有局部有序

    具体步骤如下:

    第一个指针fisrt往下遍历k次。

    第二个指针second从头开始,和first指针同时走,一直等到first走到最后一个节点。如下图

    1  -   2  -    3   -  4  -       5

                     ⬆️                 ⬆️

                   second          first

    tmp指针只向second的下一个节点。

    然后将fisrt指向链表的头部,second指空,那么翻转后的链表的头部就是tmp

    具体代码如下:

     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==None or head.next==None or k==0:return head
    13         count,og_start=0,head
    14         while head!=None:
    15             head=head.next
    16             count+=1
    17         first,second,k=og_start,og_start,k%count
    18         if k==0:return og_start
    19         for i in range(k):first=first.next
    20         while first.next!=None:
    21             first=first.next
    22             second=second.next
    23         tmp=second.next
    24         second.next=None
    25         first.next=og_start
    26         return tmp
  • 相关阅读:
    MySQL大数据分页调优实践
    CentOS 搭建L2TP
    CentOS 搭建SS5
    CentOS 搭建PPTP
    CentOS 防火墙 firewalld
    CentOS 初始化账号
    nginx升级与回退
    Python
    python
    linux
  • 原文地址:https://www.cnblogs.com/pkuYang/p/4434263.html
Copyright © 2011-2022 走看看