题目:
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
解答:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseK(self,slow,fast):
pre=None
cur=slow
while cur!=fast:
tmp=cur.next
cur.next=pre
pre=cur
cur=tmp
return pre
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
if not head:
return None
#处理不足k个节点的情况
fast,slow=head,head
for i in range(k):
if not fast:
return slow
fast=fast.next
#处理多于K个节点的情况
#翻转[slow,fast)
newHead=self.reverseK(slow,fast)
slow.next=self.reverseKGroup(fast,k)
return newHead