leetcode61.旋转链表
程序员文章站
2022-05-06 09:42:56
...
1.题目描述
给定一个链表,旋转链表,将链表每个节点向右移动 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
2.解题思路
参考链接:https://leetcode-cn.com/problems/rotate-list/solution/ji-bai-liao-91de-javayong-hu-qing-xi-yi-dong-by-re/
3.代码实现
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def rotateRight(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
if not head or k == 0:
return head
length = 0
p = head
while p:
p=p.next
length+=1
k = k % length
# 倒数第k个节点,即正数length - k
count = length - k
i = 0
last = head
while i < count-1:
last = last.next
i+=1
newHead = last.next
# 找到新的头结点的之前一个节点,并把它当成新链表的最后一个节点。
last.next = None
# 处理特殊情况
if not newHead:
return head
q = newHead
while q.next:
q=q.next
# 连接上
q.next = head
return newHead
下一篇: leetcode(61) 旋转链表