题目链接
分析:其实一共就这么几种情况
情况一:
当前值 < insertVal,并且下一个值 >insertVal,那么insertVal肯定在这两个中间
情况二:
当前值 == insertVal,那么直接让insertVal是当前值的下一个
情况三:比最大值还大或者还小,那么找到当前值大于当前值的下一个的节点,那么当前节点就是之前链表中值最大的,那么将当前节点的下一个置为insertVal,此时insertVal可以是最大值也可以是最小值
情况四:所有链表中值都相等,那么随便插入insertVal即可。
情况五:head空
情况六:只有一个节点
代码:
class Solution {
public Node insert(Node head, int insertVal) {
Node node = new Node(insertVal);
//情况五
if(head==null){
node.next = node;
return node;
}
//情况六
if(head.next==head){
head.next = node;
node.next = head;
return head;
}
Node p = head;
Node p1 = head;
while(true){
//情况一 和 情况二
if(p.val==node.val || (p.val<node.val && p.next.val>node.val) ){
node.next = p.next;
p.next = node;
return head;
}
p = p.next;
if(p==p1){
break;
}
}
if(p==p1){
while(true){
//情况三
if(p.next.val<p.val){
node.next = p.next;
p.next = node;
return head;
}
p=p.next;
if(p==p1){
break;
}
}
}
//情况四
if(p==p1){
node.next = head.next;
head.next = node;
}
return head;
}
}
还有一种思路,就是先找到真正的头节点,就是找到最小值,然后将insertVal插入