题目:
将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。
具体做法:k = 3
- step 1:每次从进入函数的头节点优先遍历链表k次,分出一组,若是后续不足k个节点,不用反转直接返回头。
- step 2:从进入函数的头节点开始,依次反转接下来的一组链表
- step 3:这一组经过反转后,原来的头变成了尾,后面接下一组的反转结果,下一组采用上述递归继续。
def reverseKGroup(self , head: ListNode, k: int) -> ListNode: # write code here #找到每次翻转的尾部 tail = head #遍历k次到尾部 for i in range(0,k): #如果不足k到了链表尾,直接返回,不翻转 if tail == None: return head tail = tail.next #翻转时需要的前序和当前节点 pre = None cur = head #在到达当前段尾节点前 while cur != tail: #翻转 temp = cur.next cur.next = pre pre = cur cur = temp #当前尾指向下一段要翻转的链表 head.next = self.reverseKGroup(tail, k) return pre
标签:单链,cur,一组,python,反转,链表,tail,节点,翻转 From: https://www.cnblogs.com/ailie/p/16941317.html