题目描述:
K链表翻转是指把每K个相邻的结点看成一组进行翻转,如果剩余节点不足K个,则保持不变 。假设给定链表1—>2—>3—>4—>5—>6—>7—>8和一个数K,如果K的值为2,那么翻转后的链表变为2—>1—>4 —> 3 —> 6 — >5 — >7。如果K的值为3,那么翻转后的链表为:3 —>2 —> 1 —> 6 —> 5 —> 4 —> 7
算法思想:
首先把前K个结点看成一个子链表,采用前面介绍的方法进行翻转,把翻转后的子链表接到头结点的后边,然后把接下来的K个节点看做是另外一个单独的链表进行翻转,把翻转后的子链表接到上一个已经完成翻转的子链表的后面。
算法性能:
时间复杂度为o(n),空间复杂度为o(1)
class Node(object):
def __init__(self, item):
self.data = item
self.next = None
#对不带头节点链表的翻转
def Reverse(head):
if head == None or head.next == None:
return head
pre = head
cur = head.next
next = cur.next
pre.next = None
while cur is not None:
next = cur.next
cur.next = pre
pre = cur
cur = nex