环形有序链表插入节点
2017-07-13 16:00
246 查看
题目:将值为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,请构造出这个环形链表,并插入该值。
思路:
分以下情况:
(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; c159 while(cur!=head){//普遍情况 if(val>=pre.val&&val<cur.val){ pre.next=node; node.next=cur; break; } pre=cur; cur=cur.next; } return head; } }
相关文章推荐
- 向有序的环形单链表中插入新节点
- 将节点插入到建立起来的有序链表中
- 向循环有序链表内插入一个节点
- 实现一个 链表 有序插入新节点
- 数据结构——11 有序双向链表中插入节点
- 链表(篇1)循环有序链表中插入节点
- [算法]向有序的环形单链表中插入新节点
- 【C与指针】有序单链表插入节点
- 环形链表中插入新节点
- 链表问题---向有环的环形链表中插入新节点
- 向有序循环单向链表中插入节点
- 数据结构与算法分析笔记与总结(java实现)--链表9:有序环形链表中插入新结点问题
- 单向链表之有序插入节点(C语言实现)
- 编程实现单链表和双链表的插入节点
- 删除有序链表中的重复节点
- 链表的有序插入
- 编程算法 - 有序双循环链表的插入 代码(C)
- 链表的创建、元素插入、元素删除、以及两个有序链表的归并
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- 向升序单向链表中插入一个节点