环形有序链表插入节点
来源:互联网 发布:mac画流程图 编辑:程序博客网 时间:2024/06/04 22:28
题目:将值为value的节点node插入有序环形链表中(头节点head)
思路:
分以下情况:
(1)head==null,即链表为空,那么node.next=next,返回node。
(2)链表不为空,pre=head,cur=head.next;两个同步向后找,直到pre<node<cur,将node插入两者中间
(3)如果没找到(2),node要插入head前面,有两种情况:node>cur,node<head,其中后者返回node节点作为新头结点,因为要维持环形链表有序这一特性。
牛客该题的后台测试序列有问题,它是把期看成单链表而不是循环链表了
有一个整数val,如何在节点值有序的环形链表中插入一个节点值为val的节点,并且保证这个环形单链表依然有序。
给定链表的信息,及元素的值A及对应的nxt指向的元素编号同时给定val,请构造出这个环形链表,并插入该值。
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class InsertValue { public ListNode insert(int[] a, int[] nxt, int val) { // write code here ListNode node=new ListNode(val); if(a==null) {//初始为空链表 node.next=node; return node; } ListNode head=new ListNode(a[0]); ListNode cur=head; ListNode pre=head; for(int i=0;i<a.length-1;i++){//构造环形链表 cur.next=new ListNode(a[nxt[i]]); cur=cur.next; } cur.next=head; if(val<head.val){//插入值小于头结点值 node.next=head; cur.next=node; return node; } if(val>=cur.val){//插入值大于等于尾节点值 cur.next=node; node.next=head; return head; } pre=head; cur=head.next; while(cur!=head){//普遍情况 if(val>=pre.val&&val<cur.val){ pre.next=node; node.next=cur; break; } pre=cur; cur=cur.next; } return head; }}
阅读全文
0 0
- 环形有序链表插入节点
- 向有序的环形单链表中插入新节点
- 环形链表中插入新节点
- 链表问题---向有环的环形链表中插入新节点
- 有序单链表节点的插入
- 无表头结点的有序环形链表的合并
- 有序链表的插入
- 有序链表的插入
- 有序链表的插入
- 有序链表的插入
- 有序链表的插入
- 实现一个 链表 有序插入新节点
- 【C与指针】有序单链表插入节点
- 向有序循环单向链表中插入节点
- 删除有序链表中的重复节点
- 删除有序链表中的重复节点
- 往有序链表的插入元素使原链表依旧有序
- 双向链表 删除节点 插入节点
- JS组件系列——表格组件神器:bootstrap table(三:终结篇,最后的干货福利)
- 使用MVP模式及retrofit框架实现登录
- 启动和停止MySQL
- leetcode题目整理
- Jquery serialize() serializeArray()方法提交form表单数据
- 环形有序链表插入节点
- django时间的时区问题(转)
- Shell下的进度条
- 求两个集合的交集和并集
- spring mybatis mapper接口注解方式注入
- Leetcode算法学习日志-53 Maximum Subarray
- java代码读取到excel的两列数据,进行相乘得到新的数据
- sql 编辑功能名称重复性校验
- 电解电容器的用途