欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

大數(shù)據(jù)中鏈表如何進(jìn)行排序

小編給大家分享一下大數(shù)據(jù)中鏈表如何進(jìn)行排序,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)按需定制設(shè)計(jì),是成都網(wǎng)站制作公司,為成都LED顯示屏提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開發(fā)等。成都網(wǎng)站推廣熱線:028-86922220

算法:

對(duì)于鏈表的排序,一般要設(shè)計(jì)到拆分合并兩步,拆分這一步:

中間節(jié)點(diǎn)作為臨界值,小的放左邊,大的放右邊

合并操作步驟:

將兩個(gè)有序的鏈表中,串聯(lián)起來

題目1:分隔鏈表

https://leetcode-cn.com/problems/partition-list/submissions/

大數(shù)據(jù)中鏈表如何進(jìn)行排序

代碼實(shí)現(xiàn):

/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func partition(head *ListNode, x int) *ListNode {    if head == nil {        return nil    }    curr := head    before := new(ListNode)    before1 := before    after := new(ListNode)    after1 := after    for curr != nil {        if curr.Val < x {            before.Next = curr            before = before.Next        } else {            after.Next = curr            after= after.Next        }        curr = curr.Next    }    before.Next = nil    after.Next = nil    if after1.Next != nil {        before.Next = after1.Next // after1記錄偏移之前的after首節(jié)點(diǎn)位置    }    return before1.Next // 原因是before1首節(jié)點(diǎn)是一個(gè)none的節(jié)點(diǎn)。}/* 解法:這個(gè)可以拆分成,兩個(gè)鏈表,小于x的放到before,大于等于的放到after.然后將這兩個(gè)鏈表拼接起來。*/

執(zhí)行結(jié)果:

大數(shù)據(jù)中鏈表如何進(jìn)行排序

題目2:
https://leetcode-cn.com/problems/partition-list-lcci/submissions/

大數(shù)據(jù)中鏈表如何進(jìn)行排序

代碼實(shí)現(xiàn):

/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func partition(head *ListNode, x int) *ListNode {    l1, l2 := new(ListNode),new(ListNode)    res,res1 := l1,l2    for head != nil {        if head.Val < x {            l1.Next = &ListNode{Val:head.Val}            l1 = l1.Next        } else {            l2.Next = &ListNode{Val:head.Val}            l2 = l2.Next        }        head = head.Next    }    l1.Next = res1.Next    return res.Next}// 雙指針排序,小于x的放到l1,大于x的放在l2; 最后將兩個(gè)鏈表串起來

執(zhí)行結(jié)果:

大數(shù)據(jù)中鏈表如何進(jìn)行排序

題目3:排序鏈表

https://leetcode-cn.com/problems/sort-list/

大數(shù)據(jù)中鏈表如何進(jìn)行排序

代碼實(shí)現(xiàn):

/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func sortList(head *ListNode) *ListNode {     // 歸并寫法:1.先拆分,二分法拆分,快慢指針;2.在合并,雙指針的方式    if head == nil || head.Next == nil {        return head    }    // 快慢指針找到對(duì)應(yīng)的中間位置節(jié)點(diǎn)    s,f := head,head.Next // 兩個(gè)指針不要指向同一個(gè)節(jié)點(diǎn)    for f != nil && f.Next != nil {        s = s.Next        f = f.Next.Next    }    tmp := s.Next    s.Next = nil     // 遞歸操作左右鏈表    l := sortList(head)    r := sortList(tmp)    pre := new(ListNode)    res := pre    // 合并左右鏈表    for l != nil && r != nil {        if l.Val < r.Val {            pre.Next = l            l = l.Next        } else {            pre.Next = r            r = r.Next        }        pre = pre.Next    }    if l != nil {        pre.Next = l    } else if r != nil {        pre.Next = r    }    return res.Next}

執(zhí)行結(jié)果:

大數(shù)據(jù)中鏈表如何進(jìn)行排序

以上是“大數(shù)據(jù)中鏈表如何進(jìn)行排序”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前名稱:大數(shù)據(jù)中鏈表如何進(jìn)行排序
文章分享:http://chinadenli.net/article20/ppcijo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器網(wǎng)站建設(shè)自適應(yīng)網(wǎng)站ChatGPTApp設(shè)計(jì)微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)