赞
踩
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
1.当成数组来直接进行交换,再在最后存入链表中。
2.借助栈,将k个数据分批进栈出栈再链接,一边顺序遍历链表,一边存入栈中,值得注意的是循环的出口条件以及处理在最后一趟的数据不能完全存入栈中的可能性(不够k)
1.way01(超时间限制)
- def reverseKGroup(self, head, k):
- def reverse(left,right,list):
- while left<right:
- temp = list[left]
- list[left] = list[right]
- list[right] = temp
- res = ListNode(999)
- start = res
- res.next = None
- list1 = []
- while head:
- list1.append(head.val)
- head = head.next
- for i in range(len(list1)):
- if (i+1) % k == 0:
- reverse(i-k,i,list1)
- for item in list1:
- node = ListNode(item)
- node.next = res.next
- res.next = node
- return start
2.栈
- def reverseKGroup(self, head, k):
- # dummy为结果数组
- dummy = ListNode(-1)
- p = dummy
- while True:
- tmp = head
- # 栈用于先进后出
- vector = []
- # 每次倒计数
- count = k
- while count and tmp:
- vector.append(tmp)
- tmp = tmp.next
- count -= 1
- # 栈内无数据,链表未结束
- # 即最后一趟
- if count:
- p.next = head
- break
- while vector:
- p.next = vector.pop()
- p = p.next
- # 每倒完一次,与剩下的相连
- p.next = tmp
- head = tmp
- return dummy.next
1.way01
2.way02
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。