問題一:現在有鍊錶a和鍊錶b,都已經公升序排列,將a和b合併後也按公升序排列。
演算法思路一:在鍊錶a中分別取出每個結點,再分別與鍊錶b中的結點進行比較,找到適當位置後插入。這種演算法時間複雜度太高,假如鍊錶a和;鍊錶b的長度分別是m和n,那麼複雜度就是o(m*n)。
演算法思路二:鍊錶a和鍊錶b分別有兩個指向當前結點的指標pahead和pahead,每次比較當前的這兩個結點,誰小就把誰假如到第三個新煉表中,然後小的這個鍊錶的指標繼續後移,最壞的時間複雜度是o(m+n)。
下面這個演算法是針對思路二的解法,接下來會給出兩個非有序排列的鍊錶進行排序的演算法。今天先到這裡,連著幾天熬夜碼**有點扛不住~晚安各位加油~
圖1.合併前合併後
圖2.合併過程
struct listnode ;
//列印鍊錶
void printdata(struct listnode * p)
printf("\n");
}
//建立鍊錶
struct listnode * creatlistnode(int n)
tempnode->m_pnext = null;
return phead;
}
//合併鍊錶
struct listnode * merge(struct listnode * pahead,struct listnode * pbhead)
if (pbhead == null)
struct listnode * pmergehead = null;
if (pahead->m_valuem_value) else
return pmergehead;
}
//主函式呼叫
int main(int argc, const char * argv)
合併兩個鍊錶
就是簡單的合併兩個鍊錶,這裡要求倆個鍊錶是有序的。比如 1 2 3 4 5 和 0 7 13 合併之後為 0 1 2 3 4 5 7 13 首先,簡單介紹一下思路,首先區遍歷倆個鍊錶,如果第乙個鍊錶的值小於等於第二個鍊錶的值,那麼將第乙個鍊錶的值插入乙個新的頭節點 鍊錶中,反之如果大於第二個鍊錶的值...
合併兩個鍊錶
1.問題描述description 將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 42.思路 將頭部較小的鍊錶的節點與另乙個鍊錶合併,遞迴解答。退出條件為 當乙個鍊錶為空時,返回另乙個鍊錶...
鍊錶 合併兩個有序鍊錶
標籤 鍊錶 題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。解題思路 兩種解法 遞迴和非遞迴 拓展 參考 public listnode merge listnode list1,listnode list2 else 非遞迴 public li...