面试题整理 4 合并两个排序的数组
生活随笔
收集整理的這篇文章主要介紹了
面试题整理 4 合并两个排序的数组
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
對于鏈表,《劍指offer》中感覺有些地方不妥,前面講過鏈表的頭指針是指向一個指針的指針,即指向頭結(jié)點的指針的指針。但是后面在鏈表的使用中輸入的頭指針只是指向鏈表的頭結(jié)點的指針。
后面看《c和指針》時看到單鏈表這一塊,鏈表的表示時用一個根指針來表示鏈表的起始位置,根指針指向鏈表的第一個節(jié)點,根指針只是一個指針,不包含任何數(shù)據(jù)。當我們需要改動鏈表,如果可能改動根指針,如將根指針改為指向另一個節(jié)點,則傳參時需要以指針形式傳遞才可以改動根指針的值,即參數(shù)就變?yōu)榱酥赶蚋羔樀闹羔?#xff0c;也是指向第一個節(jié)點的指針的指針。而當我們不會改動鏈表根指針時輸入?yún)?shù)不需要輸入指針,直接輸入根指針就可以了。
題目:合并兩個排序的數(shù)組
遞歸的方法:(附上《劍指offer》中的解法)
struct ListNode {int m_nValue;ListNode *m_pNext;};ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {if(pHead1 == NULL)return pHead2;else if(pHead2 == NULL)return pHead1;ListNode* pMergedHead = NULL;if(pHead1->m_nValue < pHead2->m_nValue){pMergedHead = pHead1;pMergedHead->m_pNext = Merge(pHead1->m_pNext, pHead2);}else{pMergedHead = pHead2;pMergedHead->m_pNext = Merge(pHead1, pHead2->m_pNext);}return pMergedHead; }循環(huán)的方法:(在這里我寫了一個循環(huán)的方法,這里還是輸入?yún)?shù)為指向頭結(jié)點的指針,因為原列表的頭指針可以不變,但此時實際上鏈表1和鏈表2已經(jīng)不是原來的鏈表了;個人感覺應該將兩個根指針置為NULL比較好)
ListNode* MergeSorted2Lists(ListNode* pHead1, ListNode* pHead2) {if(pHead1 == NULL)return pHead2;else if(pHead2 == NULL)return pHead1;ListNode* pListNewSmall = pHead1;ListNode* pListNewLarge = pHead2;if(pListNewSmall->m_nValue > pListNewLarge->m_nValue){swap(pListNewLarge,pListNewSmall);}ListNode* pMergedHead = pListNewSmall;while(pListNewLarge){while( pListNewSmall->m_pNext && pListNewSmall->m_pNext->m_nValue <= pListNewLarge->m_nValue ){pListNewSmall = pListNewSmall->m_pNext;}ListNode* tempNode = pListNewSmall->m_pNext;pListNewSmall->m_pNext = pListNewLarge;pListNewSmall = pListNewLarge;pListNewLarge = tempNode;}return pMergedHead; }
總結(jié)
以上是生活随笔為你收集整理的面试题整理 4 合并两个排序的数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试题整理3 大数的表示及加减法问题
- 下一篇: 面试题整理5 顺时针打印矩阵