ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

708. Insert into a Sorted Circular Linked List

2022-04-09 03:00:33  阅读:157  来源: 互联网

标签:pre Insert head 708 cur insert into Node next


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

 

标签:pre,Insert,head,708,cur,insert,into,Node,next
来源: https://www.cnblogs.com/feiflytech/p/16120692.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有