旋转链表
题目描述
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
示例 1:
输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]
示例 2:
输入:head = [0,1,2], k = 4
输出:[2,0,1]
提示:
链表中节点的数目在范围 [0, 500] 内
-100 <= Node.val <= 100
0 <= k <= 2 * 109
代码如下:
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def rotateRight(self, head, k):
"""
:type head: ListNode
:type k: int
:rtype: ListNode
"""
#判断是否为空
if not head:
return None
#求出长度
length = 0
temp = head
while temp.next :
length += 1
temp = temp.next
temp.next = head
length=length+1
k = k % length
temp = head
for i in range(1,length-k):#从1开始是因为,for循环temp是已经指向第一个了
temp=temp.next
head=temp.next#连接头节点,形成闭环
temp.next = None#从中斩断
return head
思路与心得:
1.首先判断传入的链表是否为空
2.求出链表长度,确保仅有一次循环
3.使最后一个连接头节点,再从中斩断