708. Insert into a Sorted Circular Linked List

We use two points to point to two successive nodes, we call them "pre" and "cur"

We need to consider 3 situation need to be considered:

1.  the inserted node is between two nodes values -> pre<=insert && insert<=cur

2. the inserted node is larger than all nodes, we need to find the edge of the circle where the pre is larger then cur -> pre>cur && insert>pre

3. the inserted node is smaller than all nodes, we need to find the edge of the circle where the pre is larger then cur -> pre>cur && insert<cur

class Solution {
    public Node insert(Node head, int insertVal) {
        if(head==null){
            Node insert = new Node(insertVal);
            insert.next = insert;
            return insert;
        }
        Node insert = new Node(insertVal);
        Node pre = head, cur = head.next;
        while(cur!=head){
            if(pre.val<=insertVal&&insertVal<=cur.val
               ||pre.val>cur.val&& insertVal<cur.val
               ||pre.val>cur.val&& insertVal>pre.val){
                insertNode(pre, cur, insert);
                return head;
            }
            cur=cur.next;
            pre=pre.next;
        }
        insertNode(pre, cur, insert);
        return head;
    }
    
    private void insertNode(Node pre, Node cur, Node insert){
        pre.next = insert;
        insert.next = cur;
    }
}

Or the following codes are more clear and simple:

class Solution {
public Node insert(Node head, int insertVal) {
        Node newNode = new Node(insertVal);
        if(head==null){
            newNode.next = newNode;
            return newNode;
        }
        Node cur = head.next;
        Node prev = head;
        while(cur!= head){
            if(prev.val <= insertVal && insertVal<= cur.val){
                break;
            }
            if( prev.val > cur.val && insertVal > prev.val ){
                break;
            }
            if( prev.val > cur.val && insertVal < cur.val){
                break;
            }
            prev = cur;
            cur=cur.next;
        }
        prev.next = newNode;
        newNode.next = cur;
        return head;
    }
}

 

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...