給定一個單鏈表的頭結(jié)點head(該結(jié)點有值),長度為n的無序單鏈表,對其按升序排序后,返回新鏈表。如當輸入鏈表 {3,1,4,5,2} 時,經(jīng)升序排列后,原鏈表變?yōu)?{1,2,3,4,5},對應的輸出為 {1,2,3,4,5}。
代碼實現(xiàn)
C語言代碼:
structListNode*sortInList(structListNode*head){ if(head==NULL) returnNULL; //添加一個頭指針,指向head,方便后面的排序 structListNode*H; H=malloc(sizeof(structListNode)); H->next=head; //第一步:定義三個指針 structListNode*p,*q,*r; //第二步:將p指向head,并將頭指針斷開鏈接 p=H->next; H->next=NULL; //遍歷鏈表 while(p) { //第三步:q指向當前要操作的結(jié)點,p后移,r指向頭指針 q=p; p=p->next; r=H; //第四步:將r的后繼數(shù)值與當前操作結(jié)點q的值進行比較 //若條件成立,r后移一個位置后,繼續(xù)進行比較 //若條件不成立,跳出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é)點鏈表 returnH->next; }
圖解代碼
第一步:定義三個指針

第二步:將p指向head,并將頭指針斷開鏈接

第三步:q指向當前要操作的結(jié)點,p后移,r指向頭指針

第四步:將r的后繼數(shù)值與當前操作結(jié)點q的值進行比較:若條件成立,r后移一個位置后,繼續(xù)進行比較;若條件不成立,跳出while循環(huán),將q指向r的后繼,r的后繼指向q







第五步:返回頭指針H的后繼結(jié)點鏈表

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
C語言
+關注
關注
183文章
7646瀏覽量
146094 -
代碼
+關注
關注
30文章
4975瀏覽量
74332 -
數(shù)據(jù)結(jié)構(gòu)
關注
3文章
573瀏覽量
41672 -
單鏈表
+關注
關注
0文章
13瀏覽量
7105
原文標題:數(shù)據(jù)結(jié)構(gòu):單鏈表的排序
文章出處:【微信號:嵌入式攻城獅,微信公眾號:嵌入式攻城獅】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
熱點推薦
鏈表結(jié)點的數(shù)據(jù)結(jié)構(gòu)該如何定義
當用戶需要使用鏈表管理數(shù)據(jù)時,僅需關聯(lián)數(shù)據(jù)和鏈表結(jié)點,最簡單的方式是將數(shù)據(jù)和鏈表結(jié)點打包在一起。
數(shù)據(jù)結(jié)構(gòu)中最簡單的鏈表
數(shù)據(jù)結(jié)構(gòu)作為嵌入式工程師必修課程之一,今天,我們就來講一講數(shù)據(jù)結(jié)構(gòu)中最簡單的鏈表,包含鏈表的初始化、插入和遍歷操作。 鏈表在項目開發(fā)中使用的
發(fā)表于 06-13 17:40
?742次閱讀
Linux Kernel數(shù)據(jù)結(jié)構(gòu):鏈表
Linux Kernel數(shù)據(jù)結(jié)構(gòu):鏈表原創(chuàng) 2016年10月20日 22:58:25標簽:LINUX/kernel/鏈表 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)中
發(fā)表于 09-25 16:41
數(shù)據(jù)結(jié)構(gòu)的幾個重要知識點
線性結(jié)構(gòu)、樹形結(jié)構(gòu)、圖狀結(jié)構(gòu),常用的數(shù)據(jù)結(jié)構(gòu)有:數(shù)組、鏈表、堆棧、樹、圖等,常用的排序算法有:希
發(fā)表于 02-27 15:01
常見的數(shù)據(jù)結(jié)構(gòu)
的,那樣對于數(shù)據(jù)的使用簡直是個悲劇。針對此類數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)提供了圖存儲結(jié)構(gòu),專門用于存儲這類數(shù)據(jù)。二、數(shù)
發(fā)表于 05-10 07:58
數(shù)據(jù)結(jié)構(gòu)鏈表的基本操作
嵌入式學習基礎-數(shù)據(jù)結(jié)構(gòu)鏈表的基本操作鏈表節(jié)點采用結(jié)構(gòu)體的方式進行定義,下面是最基礎的定義只有一個數(shù)據(jù)data,*pNext用于指向下一個節(jié)
發(fā)表于 12-22 08:05
C語言實現(xiàn)單鏈表舉例
所謂鏈表,就是用一組任意的存儲單元存儲線性表元素的一種數(shù)據(jù)結(jié)構(gòu)。鏈表又分為單鏈表、雙向鏈表和循環(huán)
發(fā)表于 07-11 16:40
?87次下載
java數(shù)據(jù)結(jié)構(gòu)學習
數(shù)據(jù)結(jié)構(gòu)是對計算機內(nèi)存中的數(shù)據(jù)的一種安排,數(shù)據(jù)結(jié)構(gòu)包括 數(shù)組, 鏈表, 棧, 二叉樹, 哈希表等,算法則對對這些結(jié)構(gòu)中的
發(fā)表于 11-29 09:46
?1111次閱讀
數(shù)據(jù)結(jié)構(gòu)常見的八大排序算法
本文總結(jié)了數(shù)據(jù)結(jié)構(gòu)常見的八大排序算法。詳細分析請看下文
發(fā)表于 02-05 15:26
?2014次閱讀
你知道Linux內(nèi)核數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的作用?
Linux 內(nèi)核提供一套雙向鏈表的實現(xiàn),你可以在 include/linux/list.h 中找到。我們以雙向鏈表著手開始介紹 Linux 內(nèi)核中的數(shù)據(jù)結(jié)構(gòu) ,因為這個是在 Linux 內(nèi)核中使用最為廣泛的
發(fā)表于 05-14 17:27
?2201次閱讀
什么是棧?數(shù)據(jù)結(jié)構(gòu)中棧如何實現(xiàn)
今天放松一下,我們來看看數(shù)據(jù)結(jié)構(gòu)中的棧,這節(jié)的知識點可以說是數(shù)據(jù)結(jié)構(gòu)中最容易上手的知識點了,其實比起鏈表,其實鏈表也有棧和隊列的模型,鏈表的
發(fā)表于 04-29 18:25
?0次下載
解析數(shù)據(jù)結(jié)構(gòu)的常用七大排序算法
為了讓大家掌握多種排序方法的基本思想,本篇文章帶著大家對數(shù)據(jù)結(jié)構(gòu)的常用七大算法進行分析:包括直接插入排序、希爾排序、冒泡排序、快速
Linux內(nèi)核的鏈表數(shù)據(jù)結(jié)構(gòu)
Linux內(nèi)核實現(xiàn)了自己的鏈表數(shù)據(jù)結(jié)構(gòu),它的設計與傳統(tǒng)的方式不同,非常巧妙也很通用。
Linux內(nèi)核中使用的數(shù)據(jù)結(jié)構(gòu)
Linux內(nèi)核代碼中廣泛使用了數(shù)據(jù)結(jié)構(gòu)和算法,其中最常用的兩個是鏈表和紅黑樹。 鏈表 Linux內(nèi)核代碼大量使用了鏈表這種數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu):單鏈表的排序
評論