c++中合并兩個有序鏈表的方法?這個問題可能是我們日常學習或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純热?,讓我們一起來看看吧?/p>
在興賓等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站設計、成都網(wǎng)站建設 網(wǎng)站設計制作定制設計,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站設計,成都全網(wǎng)營銷,成都外貿網(wǎng)站建設公司,興賓網(wǎng)站建設費用合理。1.題目要求
這是一道求職面試時經(jīng)常要求手寫或者機試的經(jīng)典題目。
已知兩個鏈表head1和head2各自有序,請把它們合并成一個鏈表依然有序。結果鏈表要包含head1和head2的所有節(jié)點,即使節(jié)點值相同。
注意:不能開辟新空間來存儲合并后的鏈表。如果第一次做該題,很容易會想到使用新鏈表來存儲合并后的有序鏈表。雖然可以如此實現(xiàn),但是不符合常規(guī)解法和面試官的要求。
2.非遞歸實現(xiàn)
算法過程:
輸入:兩個有序的單鏈表head1與head2;
輸出:合并后的有序單鏈表mergeHead;
算法描述:
(1)如果head1或head2為空鏈表,則直接返回另外一個鏈表;
(2)選擇head1與head2鏈表當前節(jié)點值較小的節(jié)點,掛接到后并后的鏈表mergeHead;
(3)重復步驟2,直到鏈表head1或者head2遍歷完成,未遍歷完的鏈表,直接掛接到mergeHead的尾節(jié)點。
具體實現(xiàn)如下:
#include <sstream> #include <iostream> using namespace std; struct ListNode { int value; ListNode* next; ListNode() {value=0;next=NULL;} ListNode(int value,ListNode* next = NULL):value(value),next(next){} }; //@brief:非遞歸實現(xiàn)兩個有序單鏈表 //@注意:兩個鏈表需要從小到大順序排列 ListNode* mergeOrderedLinkedList(ListNode* head1,ListNode* head2) { if (head1 == NULL) { return head2; } else if(head2 == NULL) { return head1; } ListNode* mergeHead = NULL; if (head1->value<head2->value) { mergeHead=head1; head1=head1->next; } else { mergeHead = head2; head2 = head2->next; } ListNode* tmpNode = mergeHead; while(head1&&head2) { if(head1->value<head2->value) { mergeHead->next = head1; head1 = head1->next; } else { mergeHead->next = head2; head2 = head2->next; } mergeHead = mergeHead->next; } if (head1) { mergeHead->next = head1; } if (head2) { mergeHead->next = head2; } return tmpNode; } //打印鏈表 void printLinkedList(ListNode* head) { while(head) { cout<<head->value<<" "; head=head->next; } cout<<endl; } int main(int argc,char* argv[]) { ListNode* head1=NULL,*curList1=NULL,*head2=NULL,*curList2=NULL; string strIn; int value; cout<<"創(chuàng)建鏈表1,從小到大順序輸入鏈表1:"<<endl; getline(cin,strIn); stringstream ss(strIn); cout<<"ss0 strIn:"<<ss.str()<<endl; while(ss>>value) //從string中按照空格讀取int { ListNode* newNode1=new ListNode; newNode1->value=value; if(head1==NULL && curList1==NULL) { head1=newNode1; curList1=newNode1; } else { curList1->next=newNode1; curList1=curList1->next; } } cout<<"創(chuàng)建鏈表2,從小到大順序輸入鏈表2:"<<endl; getline(cin,strIn); ss.clear(); //清空狀態(tài) ss.str(""); //清空內容 ss<<strIn; //重新輸出至string cout<<"ss1 strIn:"<<ss.str()<<endl; while(ss>>value) //從string中按照空格讀取int { ListNode* newNode2=new ListNode; newNode2->value=value; if(head2==NULL && curList2==NULL) { head2=newNode2; curList2=newNode2; } else { curList2->next=newNode2; curList2=curList2->next; } } //合并兩個有序鏈表 ListNode* mergeHead=mergeOrderedLinkedList(head1,head2); //打印鏈表 cout<<"合并后鏈表:"<<endl; printLinkedList(mergeHead); }
分享文章:c++中合并兩個有序鏈表的方法-創(chuàng)新互聯(lián)
標題路徑:http://jinyejixie.com/article28/dhoicp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、品牌網(wǎng)站制作、網(wǎng)站內鏈、動態(tài)網(wǎng)站、品牌網(wǎng)站設計、ChatGPT
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容