链表问题---将单链表的每K个节点之间逆序

【题目】

  给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点,则不调整最后的节点。

【基本思路】

  方法一。时间复杂度O(N),空间复杂度O(K)。
  
  利用栈结构,依次遍历链表,将节点压入栈中,栈中节点每凑到k个就将这k个节点进行逆序,然后再连接入链表中。需要注意头节点的更新以及每组节点两头的连接。代码实现如下:

#python3.5
def reverseKNode(head, k):
    def reverse(stack, pre, next):
        while stack:
            cur = stack.pop()
            if pre != None:
                pre.next = cur
            pre = cur
        pre.next = next
        return pre


    if head == None or head.next == None or k < 2:
        return head
    stack = []
    cur = head
    newHead = head
    pre = None
    while cur != None:
        next = cur.next
        stack.append(cur)
        if len(stack) == k:
            pre = reverse(stack, pre, next)
            newHead = cur if newHead == head else newHead
        cur = next
    return newHead

  方法二。时间复杂度O(N),空间复杂度O(1)。

  不需要利用栈,用变量记录每一组开始的第一个节点和最后一个节点,然后直接逆序调整,把这一组的节点都逆序。需要注意头节点的更新以及每组节点两头的连接。代码实现如下:

def reverseKNode2(head, k):
    def reverse2(head, left, right):
        pre = None
        start = head
        while head != right:
            next = head.next
            head.next = pre
            pre = head
            head = next
        if left != None:
            left.next = pre
        start.next = right

    if head == None or head.next == None or k < 2:
        return head
    pre = None
    cur = head
    count = 0
    while cur != None:
        count += 1
        next = cur.next
        if count == k:
            start = head if pre == None else pre.next
            head = cur if pre == None else head
            reverse2(start, pre, next)
            pre = start
            count = 0
        cur = next
    return head
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值