對鍊錶進行排序

2021-07-12 05:46:05 字數 894 閱讀 3005

對鍊錶進行排序:

參考的思路是來自於這位「哥們 」

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

listnode *rt = sort(head);

return rt;

}listnode * sort(listnode *begin )

//鍊錶只有乙個元素,直接返回

if(begin->next == null)

listnode *fast_ptr = begin->next ;//注意這裡快指標要先走一步

listnode *slow_ptr = begin ;

//兩個快慢指標,將量表拆分成為兩個部分

while(fast_ptr->next != null)

}

fast_ptr = slow_ptr->next;

slow_ptr->next = null;

listnode *l1 = sort(begin );

listnode *l2 = sort(fast_ptr);

//將兩個排序的鍊錶合併成為乙個鍊錶

listnode dump(0);

listnode * l = &dump;

while(l1 != null && l2 != null)

else

} if(l1 != null)

if(l2 != null)

return dump.next;//注意這裡返回的是新的鍊錶

} void print(listnode * l)

cout<

鍊錶排序 147 對鍊錶進行插入排序

對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排...

對鍊錶進行排序(歸併排序)

首先用快慢指標的方法找到鍊錶中間節點,然後遞迴的對兩個子鍊錶排序,把兩個排好序的子鍊錶合併成一條有序的鍊錶。歸併排序應該算是鍊錶排序最佳的選擇了 保證了最好和最壞時間複雜度都是nlogn,而且它在陣列排序中廣受詬病的空間複雜度在鍊錶排序中也從o n 降到了o 1 class solution fas...

對鍊錶進行插入排序

1.問題描述 對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次...