题解 | #链表中的节点每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个,则需要对此区间进行翻转,否则不需要。

全部评论

相关推荐

目前感觉简历还有很多问题,希望各位能不吝赐教以及非常感谢这位老哥——@黑皮白袜臭脚体育生&nbsp;的项目,学完一遍感觉受益颇丰
小菜鸡只想转正:校友,我的建议是冗余的最好去掉,突出重点,比如985,211双一流的提示,专业技能调整到个人项目之后的位置。专业技能感觉写的太细了?占用篇幅最好腾出一点给项目经历,如果没写手机号和邮箱,记得加上。
点赞 评论 收藏
分享
02-13 14:30
四川大学 Java
Java抽象带篮子:简历怎么写可以看看我发的帖子,你先照着优化下简历吧
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务