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; } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。