关键点:
- 如果链表为空,让newNode自己组成环形链表,然后返回newNode;
- 如果链表不为空,令pre = head,cur = head.next,然后pre和cur同步移动,如果遇到pre节点的值小于等于num并且cur的值大于等于num,将newNode插在pre和cur之间然后返回头节点;
- 如果pre和cur转了一圈,说明newNode应该插在头节点的前面,要么是num比链表中所有节点的值大,要么比所有的都小;
- 如果num比链表中所有节点的值大,返回原来的头节点即可,如果num比所有的都小,把newNode作为链表的新的头节点返回
public Node insertNode(Node head,int num) {
Node newNode = new Node(num);
//如果为空,新节点自己成环
if(head == null) {
newNode.next = newNode;
}
Node pre = head;
Node cur = head.next;
while(cur != head) {
//环内插入 在pre和cur之间插入
if(pre.value <= num && cur.value >= num) {
break;
}
pre = cur;
cur = cur.next;
}
pre.next = newNode;
newNode.next = cur;
return head.value < num ? head : newNode;
}