如何使用Python实现链表的旋转k个位置操作
链表的旋转k个位置操作是指将链表中的元素向右移动k个位置,注意是向右移动。下面是使用Python实现链表的旋转k个位置操作的具体步骤:
1.首先判断链表是否为空或者只有一个元素,一旦是,直接返回原链表。
2.计算出链表的长度,同时将k取模,因为对于长度为n的链表,旋转k个位置和旋转k%n个位置是等价的,而且k%n < n。
3.将链表拆分成两个部分:前n-k个节点为第一部分,后k个节点为第二部分。第二部分的最后一个节点应该指向空。
4.将第一部分的最后一个节点指向空,并将第二部分的头节点作为新的头节点。
5.最后返回新的头节点即可。
下面是Python代码演示:
# 定义链表节点 class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next # 定义链表旋转k个位置的函数 def rotateRight(head: ListNode, k: int) -> ListNode: if not head or not head.next or k == 0: # 链表为空或者只有一个节点或者k=0 return head # 计算链表长度和将k取模 n, cur = 1, head while cur.next: n += 1 cur = cur.next k %= n if k == 0: # k%n=0,链表无需旋转 return head # 将链表拆分成两个部分并进行旋转 cur.next = head # 连接成环形链表 for _ in range(n-k): cur = cur.next new_head = cur.next # 新的头节点 cur.next = None # 新的尾节点 return new_head # 返回新的头节点 # 测试 # 输入: 1->2->3->4->5->None,k = 2 # 输出: 4->5->1->2->3->None head = ListNode(1) head.next = ListNode(2) head.next.next = ListNode(3) head.next.next.next = ListNode(4) head.next.next.next.next = ListNode(5) k = 2 new_head = rotateRight(head, k) cur = new_head while cur: print(cur.val, end=' ') cur = cur.next # 输出: 4 5 1 2 3
上面的代码中,我们使用了一个计数器n和一个指针cur来计算出链表的长度n,并且找到最后一个节点cur。接下来,我们将k对n取模,找到旋转的实际位置,并将链表拆分成前n-k个节点和后k个节点两个部分。最后,我们使用一个循环将第二部分的头节点作为新的头节点,并将第一部分的最后一个节点指向空。最后返回新的头节点即可。
总之,通过上述实现,我们实现了链表的旋转k个位置,是一个非常实用的操作。
相关文章