給定一個單鏈表的頭結點head(該結點有值),長度為n的無序單鏈表,對其按升序排序后,返回新鏈表。如當輸入鏈表 {3,1,4,5,2} 時,經升序排列后,原鏈表變為 {1,2,3,4,5},對應的輸出為 {1,2,3,4,5}。
代碼實現
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指向當前要操作的結點,p后移,r指向頭指針 q=p; p=p->next; r=H; //第四步:將r的后繼數值與當前操作結點q的值進行比較 //若條件成立,r后移一個位置后,繼續進行比較 //若條件不成立,跳出while循環,將q指向r的后繼,r的后繼指向q while(r->next&&r->next->valval) r=r->next; q->next=r->next; r->next=q; } //第五步:返回頭指針H的后繼結點鏈表 returnH->next; }
圖解代碼
第一步:定義三個指針
第二步:將p指向head,并將頭指針斷開鏈接
第三步:q指向當前要操作的結點,p后移,r指向頭指針
第四步:將r的后繼數值與當前操作結點q的值進行比較:若條件成立,r后移一個位置后,繼續進行比較;若條件不成立,跳出while循環,將q指向r的后繼,r的后繼指向q
第五步:返回頭指針H的后繼結點鏈表
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7601瀏覽量
136251 -
代碼
+關注
關注
30文章
4753瀏覽量
68368 -
數據結構
+關注
關注
3文章
573瀏覽量
40095 -
單鏈表
+關注
關注
0文章
13瀏覽量
6915
原文標題:數據結構:單鏈表的排序
文章出處:【微信號:嵌入式攻城獅,微信公眾號:嵌入式攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
數據結構中最簡單的鏈表
數據結構作為嵌入式工程師必修課程之一,今天,我們就來講一講數據結構中最簡單的鏈表,包含鏈表的初始化、插入和遍歷操作。 鏈表在項目開發中使用的
發表于 06-13 17:40
?358次閱讀
Linux Kernel數據結構:鏈表
Linux Kernel數據結構:鏈表原創 2016年10月20日 22:58:25標簽:LINUX/kernel/鏈表 數據結構數據結構中
發表于 09-25 16:41
你知道Linux內核數據結構中雙向鏈表的作用?
Linux 內核提供一套雙向鏈表的實現,你可以在 include/linux/list.h 中找到。我們以雙向鏈表著手開始介紹 Linux 內核中的數據結構 ,因為這個是在 Linux 內核中使用最為廣泛的
發表于 05-14 17:27
?1869次閱讀
什么是棧?數據結構中棧如何實現
今天放松一下,我們來看看數據結構中的棧,這節的知識點可以說是數據結構中最容易上手的知識點了,其實比起鏈表,其實鏈表也有棧和隊列的模型,鏈表的
發表于 04-29 18:25
?0次下載
解析數據結構的常用七大排序算法
為了讓大家掌握多種排序方法的基本思想,本篇文章帶著大家對數據結構的常用七大算法進行分析:包括直接插入排序、希爾排序、冒泡排序、快速
評論