题解 | #链表中的节点每k个一组翻转#

链表中的节点每k个一组翻转

https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @param k int整型 
# @return ListNode类
#
class Solution:
    def reverseKGroup(self , head: ListNode, k: int) -> ListNode:
        # write code here
        if not head or not head.next or k == 1:
            return head
        count = 1
        pre, cur, nxt = None, head, head.next
        stack = []
        while nxt:
            stack.append(cur)
            if count % k == 0:
                tmp_head, tail = self.reverse(stack)
                if not pre:
                    head = tmp_head
                else:
                    pre.next = tmp_head
                pre, cur, nxt = tail, tail.next, nxt.next
            else:
                cur, nxt = cur.next, nxt.next
            count += 1

        if count % k == 0:
            stack.append(cur)
            tmp_head, _ = self.reverse(stack)
            if not pre:
                head = tmp_head
            else:
                pre.next = tmp_head
        
        return head
    
    def reverse(self, stack: list[ListNode]):
        cur = stack.pop()
        head = cur
        while stack:
            nxt = cur.next
            tmp = stack.pop()
            cur.next = tmp
            tmp.next = nxt
            cur = cur.next
        return head, cur

全部评论

相关推荐

02-25 16:55
已编辑
北京工业大学 Java
211本,找日常实习的话,如果面向中厂的话,需要刷hot100么?因为之前从来没刷过,算法仅限于学校课程水平,准备3月投递简历,现在还需要背八股文,时间有些紧张,还需要刷算法题么?同时什么样的公司可以算是中厂呢?
程序员小白条:中大厂说的上名字的,必定要算法,hot100只是最基础的了,题库远不止100题捏,一般在300-400题量之间,算法=学校课程=简单题也做不出,多准备八股文和算法吧,其他项目可以放放,精刷算法就行了,花时间成长很快的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务