昨天给我干懵了刷的力扣的,今天链表也给我干懵了
我以为我链表玩得还行来着,真的这道题给彻底干晕了
我最初的想法是在上一题的基础之上进行改进,也就是按着顺序一个一个转,但是想了很久还是放弃了,太复杂
之后我又准备继续按照我的方法来,即找出一组就反转,代码如下:
def reverseKGroup(self , head: ListNode, k: int) -> ListNode:
pre = ListNode(-1) # 给链表加一个无意义的头结点
pre.next = head # 成为带头结点的链表
head = pre
cur = pre.next
while pre.next != None: # 然后就和上一题差不多了,只不过需要先把反转的组找出来
count = 1
while cur.next != None and count != k: # 寻找能反转的组
cur = cur.next
count += 1
if count == k: # 长度足够,可以反转
if cur != None:
tail = cur
cur = cur.next
tail.next = None
n_head = self.reverseList(pre.next)
n_tail = self.getTail(n_head)
n_tail.next = cur
pre.next = n_head
pre = n_tail
else: # 不能反转则可以退出了
break
return head.next
def reverseList(self, head) -> ListNode: # 反转链表
p = head
head = None
while p != None:
q = p.next
p.next = head
head = p
p = q
return head
def getTail(self, head): # 找链表尾结点
while head != None:
if head.next == None:
return head
head = head.next
return None
真的我看着我的代码我都要哭出来了,怎么能这么长啊
真的,一看评论区心凉半截
为什么别人的代码这么短我的代码这么长QAQ
我完完全全没考虑到递归,或者是从表尾进行排序 就算我想到了我估计我也写不出来
虽然说代码和人有一个能跑就行,但看到这差距还是很难受的
之前有在思考,如果我未来去开发游戏客户端,那我还需要学算法吗?
我现在的回答是:还是得学,哪怕学得不精也得学
学海无涯苦作舟啊