給定一個(gè)單鏈表的頭結(jié)點(diǎn)head(該結(jié)點(diǎn)有值),長(zhǎng)度為n的無序單鏈表,對(duì)其按升序排序后,返回新鏈表。如當(dāng)輸入鏈表 {3,1,4,5,2} 時(shí),經(jīng)升序排列后,原鏈表變?yōu)?{1,2,3,4,5},對(duì)應(yīng)的輸出為 {1,2,3,4,5}。
代碼實(shí)現(xiàn)
C語言代碼:
structListNode*sortInList(structListNode*head){ if(head==NULL) returnNULL; //添加一個(gè)頭指針,指向head,方便后面的排序 structListNode*H; H=malloc(sizeof(structListNode)); H->next=head; //第一步:定義三個(gè)指針 structListNode*p,*q,*r; //第二步:將p指向head,并將頭指針斷開鏈接 p=H->next; H->next=NULL; //遍歷鏈表 while(p) { //第三步:q指向當(dāng)前要操作的結(jié)點(diǎn),p后移,r指向頭指針 q=p; p=p->next; r=H; //第四步:將r的后繼數(shù)值與當(dāng)前操作結(jié)點(diǎn)q的值進(jìn)行比較 //若條件成立,r后移一個(gè)位置后,繼續(xù)進(jìn)行比較 //若條件不成立,跳出while循環(huán),將q指向r的后繼,r的后繼指向q while(r->next&&r->next->valval) r=r->next; q->next=r->next; r->next=q; } //第五步:返回頭指針H的后繼結(jié)點(diǎn)鏈表 returnH->next; }
圖解代碼
第一步:定義三個(gè)指針
第二步:將p指向head,并將頭指針斷開鏈接
第三步:q指向當(dāng)前要操作的結(jié)點(diǎn),p后移,r指向頭指針
第四步:將r的后繼數(shù)值與當(dāng)前操作結(jié)點(diǎn)q的值進(jìn)行比較:若條件成立,r后移一個(gè)位置后,繼續(xù)進(jìn)行比較;若條件不成立,跳出while循環(huán),將q指向r的后繼,r的后繼指向q
第五步:返回頭指針H的后繼結(jié)點(diǎn)鏈表
審核編輯:湯梓紅
-
C語言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141802 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70762 -
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
40756 -
單鏈表
+關(guān)注
關(guān)注
0文章
13瀏覽量
7013
原文標(biāo)題:數(shù)據(jù)結(jié)構(gòu):?jiǎn)捂湵淼呐判?/p>
文章出處:【微信號(hào):嵌入式攻城獅,微信公眾號(hào):嵌入式攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
鏈表結(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)該如何定義

數(shù)據(jù)結(jié)構(gòu)中最簡(jiǎn)單的鏈表
Linux Kernel數(shù)據(jù)結(jié)構(gòu):鏈表
數(shù)據(jù)結(jié)構(gòu)的幾個(gè)重要知識(shí)點(diǎn)
常見的數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)鏈表的基本操作
C語言實(shí)現(xiàn)單鏈表舉例

java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)
數(shù)據(jù)結(jié)構(gòu)常見的八大排序算法

你知道Linux內(nèi)核數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的作用?
什么是棧?數(shù)據(jù)結(jié)構(gòu)中棧如何實(shí)現(xiàn)

解析數(shù)據(jù)結(jié)構(gòu)的常用七大排序算法
Linux內(nèi)核的鏈表數(shù)據(jù)結(jié)構(gòu)

Linux內(nèi)核中使用的數(shù)據(jù)結(jié)構(gòu)

評(píng)論