LeetCode题解(python)
25. k个一组翻转链表
题目描述
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。
示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
说明 :
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
解题心得
首先计算链表长度
然后分部分进行反转,两两反转,如果k=3,则反转2次,如果k=4,则反转3次,如此往复,每部分反转k-1次
在纸上画出链表关系即可明显看出
注意:
// 表示整数除法
/ 表示浮点除法
常用链表,pre前一节点,cur当前节点,next下一节点,temp暂时节点(一般指向next的下一节点),这样就可完成大多数操作。
解题代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
rel = ListNode(-1)
rel.next = head
pre = rel
cur = head
count = 0
while head!=None:
count = count+1
head = head.next
for i in range(count//k):
for j in range(1,k):
temp = cur.next
cur.next = temp.next
temp.next = pre.next
pre.next = temp
pre = cur
cur = cur.next
return rel.next