對鍊錶進行排序:
參考的思路是來自於這位「哥們 」
/*** 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.問題描述 對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次...