方法一:
將單鏈表逆置,變換成尋找正數第k個元素
方法二:
快慢指標法,快指標比慢指標快k個節點,當快指標到達尾節點時,慢指標為倒數第k個節點
方法三:
順序遍歷兩次鍊錶法,第一次遍歷求出鍊錶長度n,將尋找倒數第k個元素轉換成尋找正數第n-k個元素
**實現方法二:
# -*-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個節點
####解題思路:
1. 首先找到鍊錶倒數第k+l個結點slow和尾結點fast;
2. 把鍊錶斷開為兩個子鍊錶,其中,後半部分子鍊錶結點的個數為k;
3. 使原鍊錶的尾結點指向鍊錶的第乙個結點;
4. 使鍊錶的頭結點指向原鍊錶倒數第k個結點。
####**實現:
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
####執行截圖:
尋找倒數第m個元素
1 題目 尋找倒數第m個元素 來自此書 programming interviews exposed secrets to landing your next job 程式設計師面試攻略 2 演算法思路 兩個指標them,p,初始化為頭元素。p指標為遍歷指標,them為位置指標,指向從p指標開始的倒...
如何尋找單鏈表倒數第K個元素
如下是乙個帶頭結點的單鏈表結構 typedef struct node node typedef struct linklist linklist 假設單鏈表中有n個元素,尋找倒數第k個元素,也就是尋找單鏈表中正數的第n k個元素,但是這個n是未知的。首先我們定義乙個結點的結構體指標 p讓其指向頭結...
如何尋找鍊錶中倒數第K個元素 python
找出單鏈表中的倒數第k個元素,例如,1 2 3 4 5 6 7,則其倒數第三個元素為5 方法一根據問題特點我們很自然的想到先把鍊錶遍歷一遍得出鍊錶的長度,然後順求第k n k nk n個元素,但是這需把鍊錶遍歷兩次。方法二快慢指標法,將快指標提前移動k kk個位置然後一起同時移動快慢指標,當快指標遍...