【python】每K个一组反转链表

小红书笔试题:https://www.nowcoder.com/questionTerminal/a632ec91a4524773b8af8694a51109e7

方法一:

需要自行定义链表结构,将输入的数据保存到你的链表中

class ListNode():
    def __init__(self,x):
        self.val = x
        self.next = None

array = list(map(int,input().split(' ')))
k = int(input())
head = ListNode(-1)
node = head
for i in array:
    node.next = ListNode(i)
    node = node.next

反转链表后转成字符串输出: 

def reverse(head,k):
    current = head
    cnt = 0
    while current and cnt != k:
        current = current.next
        cnt += 1
    if cnt == k:
        current = reverse(current,k)
        while cnt:
            tmp = head.next
            head.next = current
            current = head
            head = tmp
            cnt -= 1
        head = current
    return head

p = reverse(head.next,k)
res = []
while p:
    res.append(str(p.val))
    p = p.next
print(' '.join(res))

将上面的代码简化一下:

 

def reverseList_k(head,k):
    cur = head
    cnt = 0
    while cur and cnt != k:
        cur = cur.next
        cnt += 1
    if cnt == k:
        cur = reverseList_k(cur,k)
        while cnt:
            head.next,cur,head = cur,head,head.next
            cnt -= 1
        head = cur
    return head

方法二:

直接用array进行数组元素交换

def reverse(array,left,right,k):
    cishu = k//2
    while cishu>0:
        array[left],array[right] = array[right],array[left]
        left += 1
        right -= 1
        cishu -= 1

array = list(map(int,input().split(' ')))
k = int(input())
beishu = len(array)//k
left = 0
right = k-1
for i in range(beishu):
    reverse(array,left,right,k)
    left += k
    right += k
print(' '.join(str(i) for i in array))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值