当前位置: 首页 > news >正文

对链表进行插入排序:用Java实现

147. 对链表进行插入排序 - 力扣(LeetCode)

按题目要求,在原链表上进行排序。此处使用递归非递归两种反式。

  • 列表中的节点数在 [1, 5000]范围内
  • -5000 <= Node.val <= 5000

方法一:非递归

首先我们创建指向head的头结点,可以认为此时这个链表已经有一个有序结点了,然后再设计一个lastNode 变量指向最后一个有序的节点(如果head!=null,那么lastNode第一个指向的就是head);最后思考怎么排列呢?——》设计一个指向lastNode.next的变量curr。如果curr.val<lastNode.val则设计pre变量从duMyHead开始遍历,直到pre.val<curr.val,pre.next.val>=curr.val,就把curr插入到pre后,否则将lastNode=curr;(注意前面的都是排好了的,后面找到比lastNode.val小的就在前面找空插入就行)

代码实现:

public ListNode insertionSortList(ListNode head){if(head==null) return null;ListNode dummyHead = new ListNode(-5001);dummyHead.next=head;ListNode lastNode = head;ListNode curr=head.next;while(curr!=null){if(curr.val<lastNode.val){for(ListNode pre=dummyHead;pre!=null;pre=pre.next){if(pre.val<=curr.val&&pre.next.val>curr.val){lastNode.next=curr.next;curr.next=pre.next;pre.next=curr;if(pre==dummyHead) dummyHead.next=curr; //更新头结点,时刻指向排好的第一位break;}}}else{lastNode=curr;}curr=lastNode.next;}return dummyHead.next;}

方法二:递归

递归非常麻烦,只能结合代码理解了,我写的时候也是调试了很久。。。

    ListNode minNode ;  //时刻指向排序好的最小值public ListNode insertionSortList(ListNode head) {minNode= head;  //开始指向head,认为他是第一个有序的值if(head==null) return null;insert(head,null);return minNode;}public ListNode insert(ListNode head,ListNode cur){ListNode node=null;  //接着看下面if(head==null) return null;while(head!=null){if(cur==null||head.val>=cur.val){ //一开始cur==null递归,或有序后的第一个值大于cur.val,然后将这里的head指向的节点给到下一个cur.node = insert(head.next,head);}else{if(head.val<cur.val)return head; //head.val小于cur的就返回这个节点}if(node!=null&&node.val<head.val){if(node!=null&&node.val<minNode.val) minNode=node;head.next=node.next; //进行插入if(cur!=null) cur.next=node;node.next=head;head=node;}if(node!=null&&cur!=null&&node.val<cur.val){// if(cur.val<minNode.val) minNode=cur;return node;}if(node==null) return null;}return minNode;}
http://www.dtcms.com/a/560986.html

相关文章:

  • 资讯类网站建设方案书docker wordpress 4.2
  • 设计模式——原型模式(prototype)
  • 设计模式-单列模式
  • ArgoCD与Helm:云原生部署对比解析
  • 我的创作纪念日:从 2024.11.02 到今天的一整年
  • go语言 做网站外贸导向企业网站
  • 十堰微网站建设电话计算机哪个专业最吃香而且最简单
  • OpenCV(十六):椭圆的绘制
  • 数据仓库·简介(一)
  • 如何细分行业 做网站赚钱品质培训网站建设
  • 网站建设 思路室内设计平面图包括
  • 【软件安全】Web Security(Cookies / Session / XSS / SQL Injection / CSRF)概念介绍
  • 【踩坑篇】MyBatis-Plus拦截 ResultSetHandler.handleResultSets返回结果为空List
  • SSM框架高频考点
  • Chart.js 气泡图
  • C4D R21文字挤压的封盖变化详解
  • 网站咨询弹窗是怎么做的视频教做家常菜的网站
  • 网站备案 图标jsp网站开发框架
  • 网站翻页模板wordpress 点击导航链接老是跳转到当前页面
  • 计算机毕业设计java和Vue的在线购物系统 电商平台管理系统 网上购物平台
  • C++ string(四):编码
  • enumerate
  • C++ 多线程同步机制详解
  • EMB电子机械制动器夹紧力分析
  • 计算机操作系统:缓冲区管理
  • 绥化市建设工程网站招投标网站 服务器 域名
  • Altium23批量将元器件的摆放角度恢复正常
  • 陇西网站建设 室内设计网站有pc站和手机站
  • 因果推理算法及工具应用
  • 安卓接入Twitter三方登录