日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

合并单链表,输出单链表中间元素,判断是否有环等

發(fā)布時(shí)間:2024/1/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 合并单链表,输出单链表中间元素,判断是否有环等 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本博文內(nèi)容為單鏈表相關(guān)的筆試題,轉(zhuǎn)載請(qǐng)注明轉(zhuǎn)載處,否則必究

1. 合并兩個(gè)有序的單鏈表成一個(gè)有序的單鏈表

方法分為遞歸實(shí)現(xiàn)與非遞歸實(shí)現(xiàn),兩種方法都不額外開辟 內(nèi)存空間

鏈表的數(shù)據(jù)結(jié)構(gòu)在本博客的單鏈表逆轉(zhuǎn),約瑟夫環(huán)等?

遞歸實(shí)現(xiàn):

?

//遞歸實(shí)現(xiàn)合并兩個(gè)有序單鏈表 LinkNode* merge_list(LinkNode *pHead1, LinkNode *pHead2) {if(pHead1==NULL)return pHead2;if(pHead2==NULL)return pHead1;if(pHead1==NULL && pHead2==NULL)return NULL;LinkNode *pMergedHead=NULL;if(pHead1->value<pHead2->value){pMergedHead=pHead1;pMergedHead->next = merge_list(pHead1->next, pHead2);}else {pMergedHead=pHead2;pMergedHead->next=merge_list(pHead1, pHead2->next);}return pMergedHead; }

非遞歸實(shí)現(xiàn):

?

?

//非遞歸實(shí)現(xiàn)合并兩個(gè)有序單鏈表(不額外開辟空間) LinkNode* non_merge_list(LinkNode *pHead1, LinkNode *pHead2) {if(pHead1==NULL)return pHead2;if(pHead2==NULL)return pHead1;if(pHead1==NULL && pHead2==NULL)return NULL;LinkNode *pMergedHead = NULL;LinkNode *q=NULL;if(pHead1->value<pHead2->value){pMergedHead=pHead1;pHead1=pHead1->next;}else{pMergedHead=pHead2;pHead2=pHead2->next;} q=pMergedHead;while(pHead1 && pHead2){if(pHead1->value<pHead2->value){q->next=pHead1;pHead1=pHead1->next;}else{q->next=pHead2;pHead2=pHead2->next;}q=q->next;}if(pHead1){while(pHead1){q->next=pHead1;q=q->next;pHead1=pHead1->next;}}if(pHead2){while(pHead2){q->next=pHead2;q=q->next;pHead2=pHead2->next;}}return pMergedHead; }

?

?

2 輸出單鏈表中的中間元素(若鏈表節(jié)點(diǎn)個(gè)數(shù)為偶數(shù),則輸出中間兩個(gè)的任意一個(gè))

?

思路:利用兩個(gè)指針從頭節(jié)點(diǎn)開始遍歷,一個(gè)走一步,一個(gè)走兩步,當(dāng)一次走兩步的指針走到鏈表末尾時(shí),此時(shí)一次走一步的指針就指向鏈表的中間節(jié)點(diǎn)

代碼如下:

?

LinkNode* print_mid_node(LinkNode *pHead) {LinkNode *pOne = pHead, *pTwo = pHead;while(1) {pOne = pOne->next;pTwo = pTwo->next->next;if(pTwo==NULL || pTwo->next==NULL)return pOne;} }

?

3 判斷單戀表是否有環(huán)

?

思路與第二題一樣,只是結(jié)束條件不一樣,如果當(dāng)一次走一步的指針等于一次走兩步的指針時(shí),則表示該鏈表有環(huán)

代碼如下:

?

bool is_circle_list(LinkNode *pHead) {LinkNode *pOne = pHead, *pTwo = pHead;while(1){pOne = pOne->next;pTwo = pTwo->next->next;if(pOne == pTwo)return true;if(pTwo==NULL || pTwo->next==NULL)return false;} }




?

?

總結(jié)

以上是生活随笔為你收集整理的合并单链表,输出单链表中间元素,判断是否有环等的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。