package com.camnter.basicexercises.linklist;
import com.camnter.basicexercises.core.Node;
/**
* 有序的环形链表插入值
*
* pre = head
* cur = head.next
* 一直走下去,如果要 插入的值 小于等于 cur 或者 大于等于 pre
* 就插入到 pre 与 cur 之间
*
* 走一圈下来,如果没有的话
* 环形链表,最小都在头,最大在尾巴
*
* @author CaMnter
*/
public class OrderedCircularLinkListInsertNode> {
public Node orderedCircularLinkListInsertNode(Node head, T target) {
Node node = new Node(target);
if (head == null) {
node.next = node;
return node;
}
Node pre = head;
Node cur = head.next;
/**
* cur != head 表示了 走一圈了
*/
while (cur != head) {
if (pre.value.compareTo(target) <= 0 && cur.value.compareTo(target) >= 0) {
// 找到位置
break;
}
pre = cur;
cur = cur.next;
}
pre.next = node;
node.next = cur;
return head.value.compareTo(target) < 0 ? head : node;
}
public static void main(String[] args) {
OrderedCircularLinkListInsertNode orderedCircularLinkListInsertNode = new OrderedCircularLinkListInsertNode();
Node.printRingLinkList(orderedCircularLinkListInsertNode.orderedCircularLinkListInsertNode(Node.getRingLinkList(), 7));
Node.printRingLinkList(orderedCircularLinkListInsertNode.orderedCircularLinkListInsertNode(Node.getRingLinkList(), 0));
Node.printRingLinkList(orderedCircularLinkListInsertNode.orderedCircularLinkListInsertNode(Node.getRingLinkList(), 3));
}
}