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;
    }
}

 

posted on 2022-04-09 02:34  阳光明媚的菲越  阅读(20)  评论(0编辑  收藏  举报