2021-03-14:手写代码:单链表冒泡排序。

福大大 答案2021-03-14:

遍历链表,算出元素个数,假设为N。需要嵌套循环,外循环N-1轮,每轮循环相邻交换N-1次。

代码用golang编写,代码如下:

package mainimport "fmt"func main() {    //head := &ListNode{Val: 4}    //head.Next = &ListNode{Val: 2}    //head.Next.Next = &ListNode{Val: 1}    //head.Next.Next.Next = &ListNode{Val: 3}    head := &ListNode{Val: -1}    head.Next = &ListNode{Val: 5}    head.Next.Next = &ListNode{Val: 3}    head.Next.Next.Next = &ListNode{Val: 4}    head.Next.Next.Next.Next = &ListNode{Val: 0}    cur := head    for cur != nil {        fmt.Print(cur.Val, "\t")        cur = cur.Next    }    fmt.Println()    head = BubbleSort(head)    cur = head    for cur != nil {        fmt.Print(cur.Val, "\t")        cur = cur.Next    }    fmt.Println()}//Definition for singly-linked list.type ListNode struct {    Val  int    Next *ListNode}//冒泡排序func BubbleSort(head *ListNode) *ListNode {    if head == nil || head.Next == nil {        return head    }    //链表节点的个数    count := 0    //对链表节点计数    temp := head.Next    for temp != nil {        count++        temp = temp.Next    }    //有换头的可能,所以新增一个虚拟头节点    preHead := &ListNode{Next: head}    //冒泡    var pre, cur *ListNode    for i := 0; i < count; i++ {        pre = preHead        cur = preHead.Next        for j := 0; j < count-i; j++ {            if cur.Val > cur.Next.Val {                //相邻交换                pre.Next, cur.Next, cur.Next.Next, cur = cur.Next, cur.Next.Next, cur, cur.Next            }            pre = pre.Next            cur = cur.Next        }    }    //虚拟头节点的Next指针就是需要返回的节点    return preHead.Next}

执行结果如下:


力扣148. 排序链表
评论

©著作权归作者所有:来自51CTO博客作者福大大的原创作品,如需转载,请注明出处,否则将追究法律责任

每一份赞赏源于懂得

赞赏

0人进行了赞赏支持

更多相关文章

  1. 删除链表中重复的节点
  2. K8S v1.18.x 部署-Kubeadm方式-4:部署负载均衡
  3. K8S v1.18.x 部署-Kubeadm方式-5:部署Kubernetes HA集群
  4. K8S v1.18.x 部署-Kubeadm方式-2:部署准备
  5. 3-13(树)
  6. K8S v1.18.x 部署-Kubeadm方式-6:重置集群
  7. K8S v1.18.x 部署-Kubeadm方式-7:部署Addon-MetalLB
  8. K8S v1.18.x 部署-Kubeadm方式-3:部署工具
  9. CentOS 7部署OpenStack--准备基础环境

随机推荐

  1. Android 应用Crash 后自动重启
  2. Android: Loading files from the Assets
  3. PULL解析XML
  4. Android 之应用程序重启
  5. android:获取网络时间、文件路径,修改包名,
  6. 【特效】【自定义控件】关键字飘飞效果
  7. (转)在Android上使用OpenCL调用GPU加速
  8. Android 读取TXT 文件中文乱码 解决方案
  9. Android SDK开发 -- TitleBar重构 - 使用
  10. Android 复习笔记之图解Intent和IntentFi