题解 | #链表中的节点每k个一组翻转#O(n) O(1)

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

http://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
        
        # 与任意区间反转一致,设定三个指针
        # pre; cur cur_next
        # 当一个反转结束后,cur即变成下一个的 pre
        # 设置一个指针先行,如果够K个,则对此区间,进行反转,如果不够K个则无需反转
        new_head = ListNode(-1)
        new_head.next = head
        cur = head
        pre = new_head
        pre_k = head
        while pre_k:
            i = 1
            while pre_k and i <= k:
                pre_k = pre_k.next
                i+=1
            # 够k个,多走一步,防止返回,如果远远不够k个,则i小于k+1,如果刚好够k个,则i==k+1
            if i==k+1:
                # 对此区间进行反转
                for j in range(k-1):
                    cur_next = cur.next
                    cur.next = cur_next.next
                    cur_next.next = pre.next
                    pre.next = cur_next
                pre = cur
                cur = cur.next
#             # 结尾不够k个
#             if !pre_k or i!=k:
#                 return new_head1.next
        return new_head.next

与任意区间反转方法一样,使用三个指针完成任意区间反转,此题目,额外增加一个判断,是否需要对此区间进行反转,如果数目有k个,则需要对此区间进行翻转,否则不需要。

全部评论

相关推荐

流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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