环形有序链表插入节点

来源:互联网 发布: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;    }}


原创粉丝点击