leetcode注目のトレーニング61回し一覧

この方法の問題公式わずかに異なる説明であり、公式の解釈リストが再度リストの長さを得るためにトラバースされ、リストおよび適切な場所を見つけるために、リンクされたリストが環を形成するために、リストヘッドの端を指すが切断されます。私の方法は、<、もしK(鎖長鎖長、リストの長さを得るために、次に必要、次いで他のkの場合)>適切な位置に別のポインタP2点ながら、リストの長さで、その結果、二重ポインタを使用することです適切な位置へのポインタP2点。右位置P2へのポインタ後、回転操作を行うことができます。特定の回転操作コードを参照してください。
(場所:元のリスト内のリストの元ヘッドの結果)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def rotateRight(self, head: ListNode, k: int) -> ListNode:
        # 特殊情况处理
        if k == 0:
            return head
        if head == None:
            return head

        # 重新添加链表头
        hea = ListNode(0)
        hea.next = head

        # 计算链表长度,同时将p1移动到链表最后一个元素,利用双指针,将p2移动到合适位置(结果链表头的前一位)
        l = 0 # 链表长度
        p1 = hea
        p2 = hea
        while p1.next != None:
            p1 = p1.next
            l += 1
            if l > k: # 双指针
                p2 = p2.next

        # 如果l<=k则p1到达末尾时p2还在原始链表头,所以此时要特殊处理,使p2到达合适位置
        if l <= k:
            k = k%l
            if k == 0:
                return head
            for i in range(l-k):
                p2 = p2.next
            
        # 旋转操作
        tmp = p2.next
        p2.next = None
        p1.next = hea.next
        hea.next = tmp
        return hea.next
公開された201元の記事 ウォン称賛26 ビュー80000 +

おすすめ

転載: blog.csdn.net/Ema1997/article/details/104078006