將單鏈表逆置,變換成尋找正數第k個元素node
快慢指針法,快指針比慢指針快k個節點,當快指針到達尾節點時,慢指針爲倒數第k個節點指針
順序遍歷兩次鏈表法,第一次遍歷求出鏈表長度n,將尋找倒數第k個元素轉換成尋找正數第n-k個元素code
# -*-coding:utf-8-*- """ @Author : 圖南 @Software: PyCharm @Time : 2019/9/5 18:03 """ # 方法一:將單鏈表逆置,變換成尋找正數第k個元素 # 方法二:快慢指針法,快指針比慢指針快k個節點,當快指針到達尾節點時,慢指針爲倒數第k個節點 # 方法三:順序遍歷兩次鏈表法,第一次遍歷求出鏈表長度n,將尋找倒數第k個元素轉換成尋找正數第n-k個元素 # 本代碼實現方法二 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): cur = head.next while cur: print(cur.data, end=' ') cur = cur.next print() def getLastK(head, k): fast = head slow = head while k: fast = fast.next k -= 1 while fast: fast = fast.next slow = slow.next return slow.data if __name__ == '__main__': head = con_link(7) print_link(head) print(getLastK(head, 1))
使鏈表的頭結點指向原鏈表倒數第k個結點。blog
def rotateLink(head, k): fast = head slow = head while k: fast = fast.next k -= 1 while fast.next: fast = fast.next slow = slow.next fast.next = head.next head.next = slow.next slow.next = None return head