首先把前K個結點當作一個子鏈表,採用前面介紹的方法進行翻轉,把翻轉後的子鏈表連接到頭結點後面,而後把接下來的K個結點當作另一個單獨的鏈表進行翻轉,把翻轉後的子鏈表連接到上一個已經完成翻轉子鏈表的後面node
# -*-coding:utf-8-*- """ @Author : 圖南 @Software: PyCharm @Time : 2019/9/7 11:37 """ class Node: def __init__(self, data=None, next=None): self.data = data self.next = next def con_link(n): head = Node() cur = head for i in range(1, n + 1): node = Node(i) cur.next = node cur = node return head def print_link(head): if head is None or head.next is None: return cur = head.next while cur: print(cur.data, end=" ") cur = cur.next print() def reverseKNode(head, k): if head is None or head.next is None: return if k == 0 or k == 1: return head pre = head begin = head.next while begin: end = begin for i in range(k-1): if end.next: end = end.next else: return head next= end.next end.next = None r_head, r_end = reverseLink(begin) r_end.next = next pre.next = r_head pre = r_end begin = next return head def reverseLink(head): if head is None or head.next is None: return r_end = head pre = head r_head = pre.next pre.next = None while r_head.next: next = r_head.next r_head.next = pre pre = r_head r_head = next r_head.next = pre return r_head, r_end if __name__ == '__main__': n = int(input("請輸入n:")) k = int(input("請輸入k:")) head = con_link(n) print_link(head) head = reverseKNode(head, k) print_link(head)