單鏈表使其原始元素遞增有序

2021-09-25 05:37:05 字數 822 閱讀 2107

問題描述:有乙個帶頭結點的單鏈表l,設計乙個演算法使其元素遞增有序。(空間複雜度要求為o(1))。

演算法思想:解決本題的思想類似於直接插入排序的思想。先構成只含乙個資料結點的有序單鏈表,然後依次遍歷單鏈表l中剩下的結點。在有序單鏈表中插入時,需要依次遍歷有序單鏈表,直到找到插入位置,使得插入後有序單鏈表仍然有序。每當完成一次操作,鍊錶l中元素減1,有序表中元素加1,直到鍊錶l為空時結束。所以本演算法的時間複雜度為o(n2).

演算法**:

void sort(linklist &l)

p->next = pre->next;//在有序表的相應位置插入

pre->next = p;

}}

完整**:

#include#include#includeusing namespace std;

typedef char elemtype;

typedef struct lnodelnode,*linklist;

void create(linklist &l)

p->next = null;

}void sort(linklist &l)

p->next = pre->next;//在有序表的相應位置插入

pre->next = p; }}

int main()

system("pause");

return 0;

}

執行結果:

有序單鏈表

由標題就可以知道,這篇部落格我們使用的是在插入時就已經排好序的單鏈表.我把它命名為 orderedlist 這裡我們從小到大排序,下面我們以此看一下它的主要方法與 實現就好 主要方法 插入節點 override public void insert int key else else if p.ne...

判斷帶表頭的單鏈表是否有序遞增

設計乙個演算法判定帶表頭結點的單鏈表是否有序遞增,並討論演算法的時間複雜度。判斷是否有序遞增status order headerlist h,int n else flag 1 p q q q link if flag 1 else printf yes return ok include inc...

DS 有序單鏈表刪除重複元素

題目描述 根據乙個遞增的整數序列構造有序單鏈表,刪除其中的重複元素 輸入輸入包括多組測試資料,每組測試資料佔一行,第乙個為大於等於0的整數n,表示該單鏈表的長度,後面跟著n個整數,表示鍊錶的每乙個元素。整數之間用空格隔開 輸出針對每組測試資料,輸出包括兩行,分別是刪除前和刪除後的鍊錶元素,用空格隔開...