一. 鏈表 4 鏈表排序

問題:用插入排序?qū)︽湵砼判?/p>

思路:使用鏈表中開頭的兩個node掌栅,建立一個新的鏈表半开。然后依次從舊的鏈表第三個node開始取值混滔,進行插入排序舶吗。

Python3

"""
Definition of ListNode
class ListNode(object):

    def __init__(self, val, next=None):
        self.val = val
        self.next = next
"""
class Solution:
    """
    @param head: The first node of linked list.
    @return: The head of linked list.
    """ 
   def insertionSortList(self, head):
        if head == None and head.next == None:
            return head
        
        # a flexible point of ranked list
        ranked_point = head
        # a flexible point of raw list
        raw_point = head.next
        point = raw_point
        # seperate the list into 2 lists
        head.next = None
        
        while raw_point != None:
            
            while ranked_point != None: 
                
                # if new node is smaller than current node
                if raw_point.val <= ranked_point.val:
                    # jump to next node of the raw list
                    raw_point = raw_point.next
                    # insert this new node into the list
                    point.next = ranked_point
                    
                    # if the new node is smallest one 
                    if ranked_point == head:
                        # refresh the head 
                        head = point
                    point = raw_point
                    break
                
                # if the new node is the largest one in ranked list
                if ranked_point.next == None:
                    # insert it into the tail of the ranked list
                    ranked_point.next = raw_point
                    # jump to next node of the raw list
                    raw_point = raw_point.next
                    
                    ranked_point.next.next = None
                    break         
                ranked_point = ranked_point.next 
            ranked_point = head
        return head

思考:

  1. 在建立新的鏈表過程中征冷,為了減少空間復(fù)雜度,我沒有新建node誓琼,而是將原node進行修改检激。這就牽涉到了對象實例的引用。我們可以通過引用來修改對象實例的值腹侣,但是要知道一旦修改叔收,這個node的其他引用也會被修改。所以我們要將跳到下一個node的行為提前運行傲隶,不然一旦被修改饺律,next指針就會失去原目標(biāo)。

  2. 在一開始的時候伦籍,我本來準(zhǔn)備用通用的程序來表達所有的特殊情況蓝晒,例如在新的鏈表頭插入node腮出,在新的鏈表尾插入node。但是最后都不得不拿出來單獨處理芝薇,可能是我沒想到吧胚嘲,如有望告知。

Java

個人感覺任何程序一旦變成java就會復(fù)雜洛二,我寫了幾次都存在超出內(nèi)存的情況馋劈,最后再網(wǎng)路上看到別人寫的,比我的要簡單很多晾嘶,而且邏輯清晰妓雾,于是我就當(dāng)了一次代碼的搬運工。垒迂。械姻。原碼在這里

/**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 */ 
public class Solution {
    /**
     * @param head: The first node of linked list.
     * @return: The head of linked list.
     */
    public ListNode insertionSortList(ListNode head) {  
        // incase that the list is null or only one element
        if (head == null || head.next == null)  
            return head;  
        //未排序游動指針C
        ListNode c = head.next;    
        // break the list into 2 list, one is ranked list; another one is the raw list.
        head.next = null;    
        ListNode pt, h;   //pt:臨時節(jié)點指針,h:已排序部分游動指針  
  
        while (c != null) {  
            // jump to the next node
            pt = c;  
            c = c.next;  
            // make the new node link to null
            pt.next = null;  
           // point h to the head
            h = head;
  
            if (head.val > pt.val) { //比較頭部  
                pt.next = head;  
                head = pt;  
                continue;  
            }  
   
            while (h.next != null) { //比較有序部分  
                if (h.next.val > pt.val) {  
                    pt.next = h.next;  
                    h.next = pt;  
                    break;  
                }  
                // jump to the next node 
                h = h.next;  
            }  
  
            if (h.next == null) { //追加末尾  
                h.next = pt;  
            }  
        }  
        return head;  
    }  
}  

對比這兩種思路机断,一個是一邊寫楷拳,一邊處理出現(xiàn)的例外;一個是在寫之前就考慮好會出現(xiàn)的例外并拿出來單獨處理吏奸。

我感覺兩種方法都有各自的利弊欢揖,如若兩者結(jié)合起來,即以第二種為主奋蔚,第一種為輔她混,這樣可能會好很多。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泊碑,一起剝皮案震驚了整個濱河市坤按,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馒过,老刑警劉巖晋涣,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沉桌,居然都是意外死亡,警方通過查閱死者的電腦和手機算吩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門留凭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偎巢,你說我怎么就攤上這事蔼夜。” “怎么了压昼?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵求冷,是天一觀的道長瘤运。 經(jīng)常有香客問我,道長匠题,這世上最難降的妖魔是什么拯坟? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮韭山,結(jié)果婚禮上郁季,老公的妹妹穿的比我還像新娘。我一直安慰自己钱磅,他們只是感情好梦裂,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盖淡,像睡著了一般年柠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上褪迟,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天冗恨,我揣著相機與錄音,去河邊找鬼牵咙。 笑死派近,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洁桌。 我是一名探鬼主播渴丸,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼另凌!你這毒婦竟也來了谱轨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤吠谢,失蹤者是張志新(化名)和其女友劉穎荡含,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匀们,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡恋拷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了王污。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罢吃。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖昭齐,靈堂內(nèi)的尸體忽然破棺而出尿招,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布就谜,位于F島的核電站怪蔑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏丧荐。R本人自食惡果不足惜缆瓣,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望篮奄。 院中可真熱鬧捆愁,春花似錦、人聲如沸窟却。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夸赫。三九已至菩帝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茬腿,已是汗流浹背呼奢。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留切平,地道東北人握础。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像悴品,于是被迫代替她去往敵國和親禀综。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法苔严,類相關(guān)的語法定枷,內(nèi)部類的語法,繼承相關(guān)的語法届氢,異常的語法欠窒,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • 一岖妄、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,268評論 0 16
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)寂祥,斷路器衣吠,智...
    卡卡羅2017閱讀 134,714評論 18 139
  • 白露清輝,香霧飄浮壤靶。微霜染,翠葉紅榴惊搏。流年轉(zhuǎn)眼贮乳,歲月神偷忧换。看風(fēng)如馬向拆,云如髻亚茬,月如勾。 身衰何懼浓恳?初心不老刹缝,任霜華,...
    瑾檀yuying閱讀 761評論 34 36
  • javaScript(01) 簡單的數(shù)據(jù)類型:- String(字符串);- Number(數(shù)字)颈将;- Boole...
    小飛蟻閱讀 135評論 0 0