您的位置:首页 > 其它

环形有序链表插入节点

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,请构造出这个环形链表,并插入该值。

/*
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: