61. 旋转链表

    xiaoxiao2023-11-09  186

    给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。

    示例 1:

    输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3->4->NULL 向右旋转 2 步: 4->5->1->2->3->NULL

    示例 2:

    输入: 0->1->2->NULL, k = 4 输出: 2->0->1->NULL 解释: 向右旋转 1 步: 2->0->1->NULL 向右旋转 2 步: 1->2->0->NULL 向右旋转 3 步: 0->1->2->NULL 向右旋转 4 步: 2->0->1->NULL # 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 head is None or head.next is None: return head cur = head.next len = 2 # 找到链表尾,连接成环,并且保存链表长度 while cur.next: cur = cur.next len += 1 cur.next = head # 计算向右旋转,后头指针的位置 pre_head = cur step = len - (k % len) while step > 0: head = head.next pre_head = pre_head.next step -= 1 # 分割头尾 pre_head.next = None return head if __name__=='__main__': s = Solution() root = ListNode(1) root.next = ListNode(2) root.next.next = ListNode(3) root.next.next.next = ListNode(4) root.next.next.next.next = ListNode(5) result = s.rotateRight(root, 3) while result: print(result.val, end=' ') result = result.next

     

    最新回复(0)