通过迭代翻转指针,首先是当前指针直接指向下一个的下一个指针,然后下一个指针指向头指针(注意是头指针)也就是pre.next,然后pre再指向它。相当于将当前指针与下一个下一个指针。然后看链表的长度是多少count,这样的反转进行count/k次,反转时的指针变换一共会进行k-1次,所以range(1,k)
边界条件有head 为None head.next为None k为1的时候。

class Solution:
    def reverseKGroup(self , head , k ):
        # write code here
        if head==None or head.next==None or k==1:
            return head
        l=head
        cur=head
        count=0
        res=ListNode(0)
        res.next=head
        pre=res
        nextnode=None

        while l!=None:
            count+=1
            l=l.next

        for i in range(count/k):
            for j in range(1,k):
                nextnode=cur.next
                cur.next=nextnode.next

                nextnode.next=pre.next#注意nextnode节点折回去应该指向头节点
                pre.next=nextnode
            pre=cur
            cur=cur.next

        return  res.next

使用栈,根据k,将链表放入栈中然后读出就可以反转,进行count/k次,结束后连接正常链表的l节点(后半段)
也可以直接入栈节点,这样不用后面再新建节点。

class Solution:
    def reverseKGroup(self , head , k ):
        # write code here
        if head==None or head.next==None or k==1:
            return head
        n=head
        stack=[]
        count=0
        result=res=ListNode(0)
        while n!=None:
            count+=1
            n=n.next
        l=head
        for i in range(count/k):
            t=k
            while t>0:
                stack.append(l.val)
                l=l.next
                t-=1
            while stack:
                res.next=ListNode(stack.pop())
                res=res.next
        res.next=l
        return result.next

通过递归方法,设计一个递归函数为翻转链表,参数为翻转部分的头和尾,然后通过k定位循环,来找到要反转部分的尾,翻转函数通过挪指针,然后将剩下的部分再进行k个一组的翻转,再将两个部分连接起来。当剩余部分不足k个的时候,直接返回head即不进行翻转。

class Solution:
    def reverseKGroup(self , head , k ):
        # write code here
        def reverse(start,end):

            nextnode=pre=None
            cur=start
            while cur!=end:
                nextnode=cur.next
                cur.next=pre 
                pre=cur
                cur=nextnode
            return pre

        if head==None or head.next==None:
            return head

        tail=head
        i=0
        while i<k and tail!=None:
            tail=tail.next
            i+=1
        if i==k:

            reverse_result=reverse(head,tail)
        else:
            return head

        other_result=self.reverseKGroup(tail, k)

        head.next=other_result

        return reverse_result