# 如何把链表以K个结点为一组进行翻转
# 声明类结点
class LNode():
def __init__(self):
self.data = None # 数据域
self.next = None # 指针域
# 对不带头结点的单链表翻转
def Reverse(head):
if head==None and head.next==None:
return head
pre = head # 前驱结点
cur = head.next # 当前结点
next = cur.next # 后继结点
pre.next = None # 断开指针
# 使当前遍历到的结点cur指向其前驱结点
while cur!=None:
next = cur.next
cur.next = pre
pre = cur
cur = next
return pre
# 对链表K翻转
def ReverseK(head, k):
if head==None or head.next==None or k<2:
return
i = 1
pre = head
begin = head.next
end = None
pNext = None
while begin!=None:
end = begin
while i<k:
# 找到从begin开始第K个结点
if end.next!=None:
end = end.next
else:
return
i += 1
pNext = end.next
end.next = None
pre.next = Reverse(begin)
begin.next = pNext
pre = begin
begin = pNext
i = 1
if __name__=="__main__":
# 创建单链表
head = LNode()
temp = head
i = 1
while i<8:
cur = LNode()
cur.data = i
temp.next = cur
temp = cur
i += 1
print("创建单链表为:")
temp = head.next
while temp!=None:
print(temp.data)
temp = temp.next
ReverseK(head, 3)
print("逆序输出:")
cur = head.next
while cur!=None:
print(cur.data)
cur = cur.next