資料結構與演算法 鍊錶 找到鍊錶的倒數第n個點

2021-08-17 14:56:36 字數 1891 閱讀 7451

1.以下是鍊錶的抽象資料型別

public class listnode

public int getdata()

public void setdata(int data)

public listnode getnext()

public void setnext(listnode next)

2.四種解法

(1)解法一,計算當前結點的後面結點的個數m,如果m < n則返回null,如果m = n則返回當前結點,如果m > n則將當前結點更新為其後繼結點,重複上述過程,時間複雜度為o(n^2),空間複雜度為o(1)。

public static listnode findnnode1(listnode headnode, int n)

// 計算當前結點後的結點的個數

int length = 0;

listnode currentnode = headnode;

while (currentnode.getnext() != null)

// 如果結點個數小於n - 1返回null

if (length < (n - 1)) else if (length == (n - 1)) else

}(2)解法二,利用雜湊,結點的位置為key,結點的位址為value,遍歷鍊錶構造雜湊時,得到了鍊錶的長度,假設鍊錶的長度為m,則將問題轉化為尋找鍊錶正數m - n + 1個結點,時間複雜度為o(m),空間複雜度為o(m)。

// 利用hashmap來解決

public static listnode findnnode2(listnode headnode, int n)

int length = 1;

listnode currentnode = headnode;

mapmap = new hashmap<>();

while (currentnode.getnext() != null)

int key = (length - n) + 1;

return map.get(key);

}(3)解法三,第一次遍歷得到鍊錶的長度m,然後第二次遍歷鍊錶,得到第m - n + 1位置的結點即為倒數第n個結點,時間複雜度為o(n),空間複雜度為o(1)。

// 兩次遍歷解決

public static listnode findnnode3(listnode headnode, int n)

// 遍歷整個鍊錶,得到鍊錶的總長度

int length = 1;

listnode currentnode = headnode;

while (currentnode.getnext() != null)

if (length < n)

// 鍊錶的倒數第n個結點,即正數的(length - n) + 1個結點

currentnode = headnode;

int index = (length - n) + 1;

int i = 1;

while (i < index)

(4)解法四,首先初始化pnthnode,tempnode兩個指標指向頭結點,先將tempnode向後移動n個位置,然後在將pnthnode和tempnode同時向後移動,直到tempnode為null,此時pnthnode結點即倒數第n個結點。

// 用兩個指標解決

public static listnode findnnode4(listnode headnode, int n)

}// tempnode和pnthnode同時開始移動,知道tempnode為null

// 則pnthnode的結點就是倒數第n個結點

while (tempnode != null)

return pnthnode;

}

資料結構與演算法 鍊錶

題目 合併兩個已經排序好的鍊錶 非遞迴和遞迴兩種 方法1 cpp view plain copy print color 000000 合併鍊錶.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct listnod...

資料結構與演算法 鍊錶

在講述鍊錶之前讓我們對資料結構進行乙個簡單的回顧 我們知道,資料結構指的是描述實際問題中各個資料項節點之間的前後邏輯結構關係,即要麼是線性結構 即某一資料項的前繼節點和後繼節點有且只有乙個 要麼是非線性結構 即某一資料節點的前驅或者後繼節點不止乙個 在確定了實際資料項的資料結構之後,我們要採用某種儲...

資料結構與演算法 鍊錶

反轉鍊錶 def reverse head q none p heap while p temp p.next p.next q q pp temp return p判斷鍊錶環 def meetingnode head if not head return slow head fast head.n...