反转整个链表
迭代法
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
old = None
while pHead:
pHead.next,old,pHead = old,pHead,pHead.next
return old
反转k个节点链表
递归法
class Solution:
# 翻转[phead,ptail)的k个节点,返回反转后的头结点
def reverse(self,phead,ptail):
old = None
while phead!=ptail:
phead.next,old,phead = old,phead,phead.next
return old
def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
if not head or not head.next:
return head
tail = head
for i in range(k):
if not tail:
return head
tail = tail.next
newhead = self.reverse(head,tail)
head.next = self.reverseKGroup(tail,k)
return newhead