36 倆個鍊錶的第乙個公共結點

2021-09-25 05:06:00 字數 3526 閱讀 1990

題目描述

輸入兩個鍊錶,找出它們的第乙個公共結點。

/*

struct listnode

};*/

class solution

};

思路:開始遍歷兩遍鍊錶獲取兩個表的長度,比較長度讓長的乙個先走差值個步長, 再兩個一起走。(快慢指標思想,也是鍊錶問題的一般性思路)

class solution 

listnode *p1 = phead1;

listnode *p2 = phead2;

int len1 = 0;

int len2 = 0;

//首先遍歷兩個鍊錶獲取長度

while(p1)

while(p2)

//重新指向煉表頭

p1 = phead1;

p2 = phead2;

//比較長度,長的先走(len1-len2)步

if(len1>len2)

}if(len2>len1)

}while(p1!=null && p2!=null && p1!=p2)

return p1;

}};

思路:設表1長度n,表2長度m,暴力法巢狀遍歷兩個鍊錶需要o(m*n)的時間複雜度, 可以採用hash的思想將其中乙個轉存為雜湊表結構,這樣建雜湊表時間o(m), 而遍歷鍊錶時間o(n),而遍歷時查詢雜湊表的時間為o(1),因此複雜度降為o(m+n), 但需要輔助空間。(這種雜湊優化的策略是一般性的思路,謹記!)

class solution 

unordered_multisethashset;

listnode *p1 = phead1;

listnode *p2 = phead2;

while(p2 != null)

while(p1 != null)

p1 = p1->next;

}return null;

}};

unordered_multiset 類

標頭:命名空間: std

此模板類描述用於控制 const key 型別的變長元素序列的物件。 序列由雜湊函式弱排序,雜湊函式將此序列分割槽到稱為儲存桶的有序序列集中。 在每個儲存桶中,比較函式將確定任一元素對是否具有等效順序。 每個元素同時用作排序鍵和值。 序列以允許查詢、插入和移除任意元素的方式表示,幷包含與序列中的元素數量無關的多個操作(常量時間),至少在所有儲存桶長度大致相等時如此。 在最壞情況下,當所有元素位於乙個儲存桶中時,運算元量與序列中的元素數量成比例(線性時間)。 此外,插入元素不會使迭代器失效,移除元素僅會使指向已移除元素的迭代器失效。

成員函式	說明

unordered_multiset::begin 指定受控序列的開頭。

unordered_multiset::bucket 獲取鍵值的儲存桶編號。

unordered_multiset::bucket_count 獲取儲存桶數。

unordered_multiset::bucket_size 獲取儲存桶的大小。

unordered_multiset::cbegin 指定受控序列的開頭。

unordered_multiset::cend 指定受控序列的末尾。

unordered_multiset::clear 移除所有元素。

unordered_multiset::count 查詢與指定鍵匹配的元素數。

unordered_multiset::emplace 新增就地構造的元素。

unordered_multiset::emplace_hint 新增就地構造的元素,附帶提示。

unordered_multiset::empty 測試元素是否存在。

unordered_multiset::end 指定受控序列的末尾。

unordered_multiset::equal_range 查詢與指定鍵匹配的範圍。

unordered_multiset::erase 移除指定位置處的元素。

unordered_multiset::find 查詢與指定鍵匹配的元素。

unordered_multiset::get_allocator 獲取儲存的分配器物件。

unordered_multiset::hash_function 獲取儲存的雜湊函式物件。

unordered_multiset::insert 新增元素。

unordered_multiset::key_eq 獲取儲存的比較函式物件。

unordered_multiset::load_factor 對每個儲存桶的平均元素數進行計數。

unordered_multiset::max_bucket_count 獲取最大的儲存桶數。

unordered_multiset::max_load_factor 獲取或設定每個儲存桶的最多元素數。

unordered_multiset::max_size 獲取受控序列的最大大小。

unordered_multiset::rehash 重新生成雜湊表。

unordered_multiset::size 對元素數進行計數。

unordered_multiset::swap 交換兩個容器的內容。

unordered_multiset::unordered_multiset 構造容器物件。

物件通過呼叫兩個儲存物件,即乙個 unordered_multiset::key_equal 型別的比較函式物件和乙個 unordered_multiset::hasher 型別的雜湊函式物件,對它控制的序列進行排序。 可以通過呼叫成員函式 unordered_multiset::key_eq() 訪問第乙個儲存物件;通過呼叫成員函式 unordered_multiset::hash_function() 訪問第二個儲存物件。 具體而言,對於所有 key 型別的值 x 和 y,key_eq()(x, y) 呼叫將僅在兩個引數值擁有等效順序時返回 true;hash_function()(keyval) 呼叫將生成 size_t 型別的值的分布。 與模板類 unordered_set 類 不同,模板類 unordered_multiset 的物件不確保 key_eq()(x, y) 對於受控序列的任意兩個元素始終為 false。(鍵不需要唯一。)

此物件還儲存最大載入因子,用於指定每個儲存桶的元素的最大所需平均數量。 如果插入元素導致 unordered_multiset::load_factor() 超出最大載入因子,容器將增加儲存桶的數量並根據需要重新生成雜湊表。

受控序列中元素的實際順序取決於雜湊函式、比較函式、插入順序、最大載入因子和儲存桶的當前數量。 通常無法**受控序列中的元素順序。 但是,可以始終確保具有等效順序的任何元素子集在受控序列中相鄰。

物件通過 unordered_multiset::allocator_type 型別的儲存分配器物件為其控制的序列分配並釋放儲存。 此分配器物件必須與 allocator 模板類的物件的外部介面相同。 請注意,已分配容器物件時,不複製儲存的分配器物件。

36 兩個鍊錶的第乙個公共結點

時間限制 1秒 空間限制 32768k 本題知識點 鍊錶 題目描述 include using namespace std struct listnode 方法一 先對齊結尾後,從前往後比較結點 class solution while p2 對齊尾部,從短的頭部開始比較 p1 phead1 p2 ...

36 兩個鍊錶的第乙個公共結點

題目 輸入兩個鍊錶,找出他們的第乙個公共結點 思路 公共結點是指結點值相同,結點指向的下乙個結點也相同。如果下乙個結點也相同,那麼下乙個結點的值記憶下乙個結點指向的結點也相同。即,從此公共結點開始,兩個鍊錶相遇,且之後的結點都是相同的,也就是重合了。因為結點位址相同,結點值相同,指向的下乙個節點的位...

36 兩個鍊錶的第乙個公共結點

因為兩個鍊錶不一定等長,所以先求出兩個鍊錶的長度。然後求差x,較長的鍊錶先走x部,然後開始比較兩個鍊錶,當遇到相同的結點則返回,一直未遇到則返回null public class listnode public class solution while l2 null if count1 count...