天天看點

【leetcode】61: 旋轉連結清單

題目如下所示:

【leetcode】61: 旋轉連結清單
這題目一看,如果不使用solution所提供的成環,或者快慢指針的辦法,則可以直接使用周遊整個連結清單,将數字儲存在一個list裡面,然後對這個list進行處理成order和rotate linked list數字order一緻的list,然後再将這個list儲存進入新建立的linked list當中,這樣就可以了,代碼如下所示:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def rotateRight(self, head: ListNode, k: int) -> ListNode:
        #這題簡單!在斷點切開分别進行操作就可以了
        #method2: use all the travel is ok
        cur=head
        i=1
        ls=[]

        while head: 
            ls.append(head.val)
            head=head.next
            if head==None:
                break
            i+=1
        
        new_node=ListNode(0)
        new_node_ad=new_node
     #這裡需要注意,因為旋轉的次數k,可能比整個連結清單的長度還長,是以需要做取餘的處理
        if k>i:
            k=k%i
        ls_after=ls[(len(ls)-k):]
        ls_new=ls_after+ls[:len(ls)-k]

        for i in ls_new:
            new_node.next=ListNode(i)
            new_node=new_node.next
        return new_node_ad.next      

得解!

繼續閱讀