主题给链表,每k个节点一组反转。 请返回反转的链表。
k是正整数,值小于或等于链表的长度。
如果节点总数不是k的整数倍,请使最后剩下的节点保持其原始顺序。
leet代码原题地址: https://leet代码- cn.com/problems/reverse-nodes-in-k-group /
测试用例的例子给出这个链表。 1-2-3-4-5
k=2时,应该返回: 2-1-4-3-5
k=3时,应该返回: 3-2-1-4-5
在代码实现中,可以将此问题划分为两个子问题,首先对链表进行分组,然后反转分组的子链表。 关于链表的反转,请参考我的这篇文章Python来实现反转链表
需要注意的是,反转子链表后,更新节点的方向。
class listnode 3360 def _ init _ (self,val,next=None ) :ifisinstance ) val, int ) :self.val=valself list ) : self.val=val [0] self.next=none head=selfforiinrange (1, len(val ) ) : node=listnode val [ I ] ) head.next=node head=head.nextclasssolution 3360 defreverselistnode (sead.nextclasssolution (3360 def reverse tail 3360 ) ad:链表的起始节点:param tail:链表的末尾节点:return:反转后的链表的起始节点和末尾节点' ' prev=tail.=tail : next=prev=current current=nextreturntail, headdefreversekgroup (k : int (-listnode : # 虚拟节点dummy_head=listnode(0) dummy _ head.next=head prev=dummy _ headwhilehead 33660 3360 tail=tail.nextifnotion 反转子链表head, tail=self.reverse listnode (tail (#更新节点的prev.next=head tail.next=next # )是后续子链表prev=tail head=tail 处理2]) list_node=listnode(l ) obj=Solution ) ) reve _ node=obj.reversekgroup (list _ node,2 ) while rekgroup