做题记录:
提交了若干次才成功的一道题。
- 如果链表是空链表,直接构造一个节点,指向自己,返回即可。
- 如果链表非空,有可能是递增,也有可能链表中所有的值相等
- 如果链表是递增的,值可能介于最大和最小值中间,也有可能小于最小值,也有可能大于最大值
3.1 如果插入值介于最大和最小值中间,那么这种情况直接找>=前面的元素值并且<=后面的元素值的位置即可
3.2 如果插入值小于最小值或者大于最大值,那么需要找到最小值和最大值的位置,并且把插入值插入这两个位置之间即可 - 假如链表中所有的值相等,如果插入值等于链表中的元素值,那么遍历第一个元素的时候就可以插入;如果插入值大于或者小于链表中的元素值,那么会一直遍历所有的元素,才能确定插入的位置。
附上代码:
public static Node insert(Node head, int insertVal) {
if (head == null) {
head = new Node(insertVal);
head.next = head;
return head;
}
Node cur = head, next = cur.next;
while (cur.next != null) {
next = cur.next;
if (cur.val <= insertVal && insertVal <= next.val) {
break;
}
if (cur.val > next.val) {
if (insertVal >= cur.val || insertVal <= next.val) {
break;
}
}
if (cur.next == head) {
break;
}
cur = cur.next;
}
Node node = new Node(insertVal);
cur.next = node;
node.next = next;
return head;
}